Hibernate не сохраняет объект при использовании @GeneratedValue(strategy=GenerationType.AUTO)

Я изучаю 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

пожалуйста, прокомментируйте, если вам нужна дополнительная информация

Попробуйте использовать @GeneratedValue (стратегия = GenerationType.AUTO, генератор = "native")

Sambit 26.07.2019 21:24

@Sambit получает ошибку. В блоке сохраняемости не определен генератор с именем «native», нужна ли какая-то конфигурация?

ankush yadav 26.07.2019 21:27

Настройка не требуется.

Sambit 26.07.2019 21:30

Вы также можете попробовать генератор личных данных, чтобы проверить, можете ли вы сохранить или нет.

Sambit 26.07.2019 21:31

он работает после добавления @GenericGenerator(name = "native",strategy = "native"), спасибо

ankush yadav 26.07.2019 21:34

в другом случае он работает хорошо.

ankush yadav 26.07.2019 21:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
549
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны использовать

@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

ankush yadav 26.07.2019 21:38

Ответы, состоящие только из кода, по-прежнему являются ответами.

pppery 27.07.2019 05:58

Другие вопросы по теме