Я изучаю 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();
NOTE: Using hibernate 5, MySQL 8, JAVA 8
пожалуйста, прокомментируйте, если вам нужна дополнительная информация
@Sambit получает ошибку. В блоке сохраняемости не определен генератор с именем «native», нужна ли какая-то конфигурация?
Настройка не требуется.
Вы также можете попробовать генератор личных данных, чтобы проверить, можете ли вы сохранить или нет.
он работает после добавления @GenericGenerator(name = "native",strategy = "native"), спасибо
в другом случае он работает хорошо.




Вы должны использовать
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
вместо
@GeneratedValue(strategy = GenerationType.AUTO)
Читайте ниже эту хорошую статью об этом.
https://vladmihalcea.com/why-should-not-use-the-auto-jpa-generationtype-with-mysql-and-hibernate/
Попробуй это
@GeneratedValue(strategy=GenerationType.IDENTITY)
спасибо за ваш ответ, но он работает с генераторами, мне было интересно только для AUTO
Ответы, состоящие только из кода, по-прежнему являются ответами.
Попробуйте использовать @GeneratedValue (стратегия = GenerationType.AUTO, генератор = "native")