休眠保存始终返回0

时间:2018-08-17 18:52:54

标签: java spring hibernate

使用Spring Hibernate,我试图保存一个实体并获取其ID。保存工作正常,但我没有得到ID返回。标识也未设置到传递给save方法的实体中。我的用户表中的id列是自动增量。

这是我的Java代码:

@Inject
private SessionFactory sessionFactory;

private Session currentSession() {
    return sessionFactory.getCurrentSession();
}
public User save(final User user) {
    Serializable id = currentSession().save(user);
    LOG.info("id: {}, obj id: {}", (Long)id, user.getId());
    //outputs "id: 0, obj id: 0"
    return user;
}

这是我的休眠xml配置文件:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="mypackage.user" table="users">
    <id name="id" type="java.lang.Long">
      <column name="id" />
      <generator class="sequence" />
    </id>
    <property name="username" type="java.lang.String">
      <column name="username"/>
    </property>
    <property name="password" type="java.lang.String">
      <column name="password"/>
    </property>
  </class>
</hibernate-mapping>

1 个答案:

答案 0 :(得分:1)

id的生成器更改为identity,它就会起作用(假设数据库中的id列为auto_increment)。 IdentityGenerator期望由数据库中的identity列生成的值,这意味着它们是自动递增的。休眠配置的问题在于,您尝试使用序列生成器而不定义序列。如果您尚未在数据库中定义任何序列,并且您的id列是自动递增的列,则最好使用identity生成器,因为Hibernate会获取数据库生成的id(使用查询来获取最后生成的ID)。

<id name="id" type="java.lang.Long">
  <column name="id" />
  <generator class="identity" /><!--Changed from sequence to identity-->
</id>