Hibernate和Postgresql自动增量不同步

时间:2014-11-14 17:11:53

标签: java hibernate postgresql orm identifier

我遇到了Hibernate和Postgres的问题。我正在重复代码块以进行测试,以确保一切正常。但是,此代码块包含重复持久方法,以将两个用户帐户持久保存到useraccount表。它第一次正常工作。但是,每次运行代码时,UserAccount对象ID都会递增,而表中的相应用户将保持其原始值。我尝试使用nativeidentity作为生成器类,identity将ID设置为0native具有相同的问题我和#39} ;如上所述。

我意识到这是一个不切实际的情况(通过相同的代码块重复),但我不觉得这是按照应有的方式运行。实际上,在删除所有表中的所有条目后,用户将正确添加到用户表中。有没有办法确保对象属性id与表id同步?

这是useraccount ids的xml映射。

<class name="UserAccount" table="useraccounts">
    <id name = "UserId" type="int" column="user_id" unsaved-value="null">
        <generator class="increment"/>
    </id>

这是Hibernate配置文件

 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE hibernate-configuration SYSTEM
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <hibernate-configuration>
 <session-factory>
    <property name="hibernate.dialect">
        org.hibernate.dialect.PostgreSQL82Dialect
    </property>
    <property name="hibernate.connection.driver_class">
        org.postgresql.Driver
    </property>
    <property name="hibernate.connection.url">
       jdbc:postgresql://localhost:5432/agora-db
    </property>
    <property name="hibernate.connection.username">
        postgres
    </property>
    <property name="hibernate.connection.password">
        postgres
    </property>
    <property name="connection_pool_size">1</property>
    <property name="hbm2ddl.auto">create</property>
    <property name="show_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <mapping resource="hibernate.hbm.xml"/>

 </session-factory>
 </hibernate-configuration>

1 个答案:

答案 0 :(得分:2)

您应该使用sequence identifier生成器,因为Postgres本身不支持IDENTITY列。它支持SERIAL列,它通过幕后序列模拟IDENTITY列。 Postgres支持的序列比IDENTITY更有效。

所以你的id定义应该是这样的:

<id name="UserId" column="user_id">
    <generator class="sequence">
        <param name="sequence">USER_ID_SEQUENCE</param>
    </generator>
</id>
相关问题