我目前正在使用java 2.3.2框架和使用postgresql数据库的spring开发一个web应用程序项目。我已经从名为play jpa的激活器中安装了play示例,可以在这里找到:play-spring-data-jpa
我面临的问题是自动生成表,由于某些原因,这个特性无法显示以下错误:
[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:
<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:
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链接的帮助下解决了问题
发布于 2014-08-14 19:15:50
它在使用generated by default as identity时会产生问题
把它移开,它就能正常工作了。
尝试以下查询
CREATE TABLE attendance.Person (id BIGINT , firstname VARCHAR(255), surname VARCHAR(255), PRIMARY KEY (id))发布于 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,从注释的属性中可以明显看出这一点。
https://stackoverflow.com/questions/25315528
复制相似问题