【发布时间】:2019-07-26 19:15:48
【问题描述】:
我正在学习Hibernate 和MySql 数据库,在制作小项目时我想出了奇怪的休眠行为。我正在尝试保存一个实体(代码如下),但实体没有持久保存到数据库中。我只使用session.save(e) 方法。如果我使用@GeneratedValue(strategy=GenerationType.IDENTITY),它就可以工作,如果我使用@GeneratedValue(strategy=GenerationType.AUTO),它就不行。
再次,如果我使用会话事务 (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();
注意:使用休眠 5、MySQL 8、JAVA 8
如果需要更多信息,请发表评论
【问题讨论】:
-
试试@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
-
@Sambit 出错,在持久化单元中没有定义名为“native”的生成器,需要一些配置吗?
-
无需配置。
-
您也可以尝试使用身份生成器来检查您是否能够保存。
-
添加 @GenericGenerator(name = "native",strategy = "native") 后它可以工作了,谢谢