Отделенный объект, переданный для сохранения — Hibernate JavaFX

#java #database #hibernate #jpa #javafx

#java #База данных #переход в спящий режим #jpa #javafx

Вопрос:

я новичок в Гибернации, и мне нужна помощь.

У меня есть таблица под названием Kasa с 3 атрибутами — id, address и account_id. В моей таблице у меня есть 12 строк. Я хочу сопоставить это с помощью Hibernate и добавить новое с помощью Java, поэтому я сделал это:

    @Entity
    @Table(name = "kasa")
    public class Kasa {

        @Id
        @GeneratedValue(generator = "incrementor")
        @GenericGenerator(name = "incrementor", strategy = "increment")
        @Column(name = "ID_KASA")
        private  int id;

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

        @Column(name = "ID_KONTO")
        private  int id_konta;
     }
  

У меня также есть методы получения и установки, но их не нужно копировать.

Теперь я хотел бы добавить новую строку в свою базу данных, вот так:

 EntityManagerFactory entityManagerFactory = 
Persistence.createEntityManagerFactory("org.hibernate.jpa");

        Kasa kasa = new Kasa();

        kasa.setId(1);
        kasa.setAdres("Kolorowaa");
        kasa.setId_konta(2);

        EntityManager entityManager = 
        entityManagerFactory.createEntityManager();
        entityManager.persist(kasa);
        entityManager.getTransaction().commit();
        entityManagerFactory.close();
  

И я получаю ошибку, подобную этой:
javax.persistence.Исключение PersistenceException: org.hibernate.PersistentObjectException: отдельная сущность, переданная в persist: model.beans.Kasa

Он указывает на эту строку: EntityManager.persist(kasa);

Я думаю, что проблема может быть в идентификаторе моего класса ‘Kasa’, потому что он генерируется автоматически.

Для моей конфигурации я использую persistence.xml подключение файла к базе данных работает нормально. Пожалуйста, помогите 🙂

Комментарии:

1. похоже, это не связано с javafx, или как это?

2. я создаю приложение javafx с помощью hibernate 🙂

3. да, конечно, но ваша проблема не связана с javafx, верно?

4. нет, это не связано

Ответ №1:

Не устанавливайте идентификатор! Если вы это сделаете, JPA things kasa уже находится в базе данных.

Идентификатор базы данных должен быть установлен JPA. Там для вас нужно определить некоторую стратегию, как должен быть рассчитан ключ. Это то, что все тезисы… @Generate… теги выполняются.

Комментарии:

1. Да, но когда я удаляю строку, в которой я установил идентификатор, я получаю другую ошибку: транзакция не была успешно запущена в этой строке: EntityManager.getTransaction().commit();

2. При записи в базу данных используйте EntityManager.getTransaction().begin() Ваш полный код должен выглядеть следующим образом: EntityManager EntityManager = EntityManagerFactory.createEntityManager(); >>>> EntityManager.getTransaction().begin(); <<<<< EntityManager.persist(kasa); EntityManager.getTransaction().commit(); EntityManagerFactory.close( );