java - Hibernate在使用@GenerateValue(strategy=GenerationType.AUTO)时不保存对象

标签 java mysql hibernate

我正在学习HibernateMySql数据库,在制作小项目时,我想出了 hibernate 的奇怪行为。我正在尝试保存一个实体(代码如下),但实体未持久保存到数据库中。我正在使用session.save(e)仅方法。如果我使用 @GeneratedValue(strategy=GenerationType.IDENTITY) 它就可以工作如果我使用 @GeneratedValue(strategy=GenerationType.AUTO) 则不会.

如果我使用 session 事务( begin and commit ),它在两种情况下都可以工作(AUTO 和 IDENTITY)。

如果我再次使用两个不同的实体,一个使用 AUTO,另一个使用 IDENTITY,那么它就可以工作。

第一个实体

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "EMPLOYEE")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "EMP_ID")
    private int empId;

    @Column(name ="name")
    private String name;

    public int getEmpId() {
        return empId;
    }

    public void setEmpId(int empId) {
        this.empId = empId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

第二个实体

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "SUPEMPLOYEE")
public class SupperEmploye {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "EMP_ID")
    private int empId;

    @Column(name ="name")
    private String name;

    public int getEmpId() {
        return empId;
    }

    public void setEmpId(int empId) {
        this.empId = empId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

保存实体的代码

Session s= HibernateConfig.getSessionFactory().openSession();
        //s.getTransaction().begin(); //working if add

        Employee e= new Employee();
        e.setName("Employee");
        s.save(e);

        SupperEmploye se = new SupperEmploye();
        se.setName("Super Employee");
        s.save(se);

        s.close();
        //s.getTransaction().commit(); // Working if add
        HibernateConfig.getSessionFactory().close();

NOTE: Using hibernate 5, MySQL 8, JAVA 8

如果需要更多信息请评论

最佳答案

试试这个

@GeneratedValue(strategy=GenerationType.IDENTITY)

关于java - Hibernate在使用@GenerateValue(strategy=GenerationType.AUTO)时不保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57225883/

相关文章:

java - 避免 JPA TransientObjectException 而不手动保存所有内容

java - Hibernate 在 PostgreSQL 中使用驼峰格式的主键

java - org.spark_project.guava.util.concurrent.ExecutionError : NoClassdefFoundError Unchecked CompileException

java - 模拟静态方法的替代方法

php - 如何优化在php中将mysql关系数据导出为json

php - PDO中缺少mysql_*的一些有用函数

MYSQL查询获取相差一小时的行

java - 生成将在 Windows 上运行的可移植 .exe 文件(从 .jar)

java - 如何在java中以bigdecimal的相反顺序处理负值?

java - 我应该或者可以在 EJB 中使用 Spring