首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java play 2框架和spring数据jpa自动生成数据库表

使用java play 2框架和spring数据jpa自动生成数据库表
EN

Stack Overflow用户
提问于 2014-08-14 18:51:16
回答 2查看 1.4K关注 0票数 1

我目前正在使用java 2.3.2框架和使用postgresql数据库的spring开发一个web应用程序项目。我已经从名为play jpa的激活器中安装了play示例,可以在这里找到:play-spring-data-jpa

我面临的问题是自动生成表,由于某些原因,这个特性无法显示以下错误:

代码语言:javascript
复制
[error] o.h.t.h.SchemaUpdate - Unsuccessful: create table public.Person (id bigint generated by default as identity, firstname varchar(255), surname varchar(255), primary key (id))
[error] o.h.t.h.SchemaUpdate - ERROR: syntax error at or near "generated"
Position: 39
[info] play - Application started (Dev)
[error] o.h.u.JDBCExceptionReporter - ERROR: relation "public.person" does not exist
Position: 13
[error] play - Cannot invoke the action, eventually got an error:  javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert:[models.Person]
[error] application - 

我的persistance.xml:

代码语言:javascript
复制
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">

<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>DefaultDS</non-jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>

我的application.conf:

代码语言:javascript
复制
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost:5432/MyTest"
db.default.user=postgres
db.default.password="2580"
db.default.jndiName=DefaultDS
applyEvolutions.default=true

当我创建桌子时,我的自我一切都变得正常了。每次删除时,我都不想重新创建我自己的表格。

更新:删除生成已经解决了问题。但是,id必须手动插入!如何自动生成id?

第二次更新:在这个stackoverflow链接的帮助下解决了问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-14 19:15:50

它在使用generated by default as identity时会产生问题

把它移开,它就能正常工作了。

尝试以下查询

代码语言:javascript
复制
CREATE TABLE attendance.Person (id BIGINT , firstname VARCHAR(255), surname VARCHAR(255), PRIMARY KEY (id))
票数 1
EN

Stack Overflow用户

发布于 2015-01-25 15:02:26

我们也面临着同样的问题。我们在id列的xml和@GeneratedValue中进行了创建。解析是删除@GeneratedValue注释并手动放置id的值,jpa默认情况下也需要很长的时间,因此给出长值(例如1l )。

要完成自动生成,请遵循另一条规则。

与JPA相关的自动生成Id的问题解决如下:

修改Person.java模型类,使Id属性具有以下注释:

@Id @TableGenerator(name="TABLE_GEN“、table="T_GENERATOR”、pkColumnName="GEN_KEY“、pkColumnValue="TEST”、valueColumnName="GEN_VALUE“、initialValue=1、allocationSize=1) TABLE_GEN generator="TABLE_GEN")公共长Id;

这将在mysql模式中创建一个名为T_GNERATOR的表,它将跟踪Id的下一个值,hibernate上的知道如何检索这个值。假设Id的初始值为1,并且在每次插入Id时增加1,从注释的属性中可以明显看出这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25315528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档