java - Hibernate Save 总是返回 0

标签 java spring hibernate

使用 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/

相关文章:

java - Spring Data JPA QueryDslPredicateExecutor 找到不同的结果

java - HTTP 请求的正则表达式在某些情况下不起作用

JavaFX 刷新 TableView 线程

java - http 请求免受 Android 攻击

java - spring-servlet.xml 和 application-context.xml 之间的@Transactional

java - 访问 Spring bean 类时发生并发修改异常

java - 在 Controller 外部获取 JPA 事务 - Play Framework

java - 无法使用 Maven 部署到 Heroku : Forbidden

spring - Spring @Async @Autowired仅在一种方法中为null

java - Hibernate——使用where子句进行选择——从域对象中获取数据