使用 Spring Hibernate,我尝试保存一个实体并获取其 id。保存工作正常,但我没有返回 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;
}
这是我的 hibernate 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>
最佳答案
将您的id
的生成器更改为identity
,它将起作用(假设数据库中的id
列是auto_increment
)。 IdentityGenerator 需要由数据库中的标识列生成的值,这意味着它们是自动递增的。您的 hibernate 配置的问题是您尝试使用序列生成器而不定义序列。如果您尚未在数据库中定义任何序列,并且 id
列是自动增量列,则使用 identity
生成器是最佳选择,因为 Hibernate 将获取 id
由数据库生成(使用查询获取最后生成的 id)。
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="identity" /><!--Changed from sequence to identity-->
</id>
关于java - Hibernate Save 总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51901344/