首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >休眠保存始终返回0

问休眠保存始终返回0
EN

Stack Overflow用户
提问于 2018-08-18 02:52:54
回答 1查看 404关注 0票数 2

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

下面是我的Java代码:

代码语言:javascript
复制
@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配置文件:

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-18 02:56:03

将id的生成器更改为identity,它就会起作用(假设数据库中的id列是auto_increment)。IdentityGenerator需要由数据库中的标识列生成的值,这意味着它们是自动递增的。hibernate配置的问题是,您试图在没有定义序列的情况下使用序列生成器。如果您没有在数据库中定义任何序列,并且您的id列是自动递增的列,则使用identity生成器是最佳选择,因为Hibernate将获得数据库生成的id (使用查询来获取最后生成的id)。

代码语言:javascript
复制
<id name="id" type="java.lang.Long">
  <column name="id" />
  <generator class="identity" /><!--Changed from sequence to identity-->
</id>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51901344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档