Postgresql OpenJPA无法在Postgres DB中创建/插入表
为了更熟悉新的JavaEE6系统,我创建了一个小的演示应用程序,它应该能够在postgres数据库中存储一些用户输入 我正在使用:Postgresql OpenJPA无法在Postgres DB中创建/插入表,postgresql,java-ee-6,glassfish-3,openjpa,Postgresql,Java Ee 6,Glassfish 3,Openjpa,为了更熟悉新的JavaEE6系统,我创建了一个小的演示应用程序,它应该能够在postgres数据库中存储一些用户输入 我正在使用: -玻璃鱼3.1 -博士后9.1 -OpenJPA 2.1.1 为此,我编写了以下实体: @Entity public class User implements Serializable { @Id @GeneratedValue(generator="user_seq",strategy=GenerationType.SEQUENCE) @SequenceG
-玻璃鱼3.1
-博士后9.1
-OpenJPA 2.1.1
为此,我编写了以下实体:
@Entity
public class User implements Serializable
{
@Id
@GeneratedValue(generator="user_seq",strategy=GenerationType.SEQUENCE)
@SequenceGenerator(name="user_seq", sequenceName="user_seq",allocationSize=1)
public Long id;
数据库完全为空,连接池在glassfish中配置。My persistence.xml如下所示:
<persistence-unit name="myDatabase" transaction-type="JTA" >
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>jdbc/myDatabase</jta-data-source>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
<property name="openjpa.jdbc.DBDictionary" value="postgres" />
</properties>
</persistence-unit>
@Stateless
public class DAOService
{
@PersistenceContext
protected EntityManager em;
public <T> T create(T t)
{
this.em.persist(t);
this.em.flush();
this.em.refresh(t);
return t;
}
SQL语句似乎很好。如果我自己创建表“user”,我会得到ReportingSQLException,即openjpa无法在现有表中插入实体
首先,我认为openjpa和postgre都希望通过激活的模式创建来创建序列。因此,将属性更改为:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(Sequences=false)" />
不幸的是,这也不起作用
我还能说什么。。陛下我的刀是这样的:
<persistence-unit name="myDatabase" transaction-type="JTA" >
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>jdbc/myDatabase</jta-data-source>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
<property name="openjpa.jdbc.DBDictionary" value="postgres" />
</properties>
</persistence-unit>
@Stateless
public class DAOService
{
@PersistenceContext
protected EntityManager em;
public <T> T create(T t)
{
this.em.persist(t);
this.em.flush();
this.em.refresh(t);
return t;
}
@无状态
公共类服务
{
@持久上下文
受保护的实体管理器em;
公共T创建(T)
{
这个.em.persist(t);
这个.em.flush();
这个.em.refresh(t);
返回t;
}
谢谢您的帮助。也许“User”是postgres上的保留关键字?您可以尝试将实体的名称指定为User0或其他名称吗