#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( );