使用Spring Hibernate,我试图保存一个实体并获取它的id。保存工作正常,但是我没有得到返回的id。id也不会设置到传递给save方法的实体中。我的users表中的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>发布于 2018-08-18 02:56:03
将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>https://stackoverflow.com/questions/51901344
复制相似问题