Имеется БД со схемой и таблицей внутри с полями id и url, пытаюсь добавить информацию (id и url) в БД PostgreSQL через Hibernate, вываливается ошибка:
org.hibernate.PersistentObjectException: detached entity passed to persist: Hibernate.model.UrlModel
Класс UrlModel:
import javax.persistence.*;
@Entity
@Table(name = "testbase", schema = "testschema")
public class UrlModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String url;
public UrlModel(int id, String url){
this.id = id;
this.url = url;
}
public UrlModel() {}
public int getId() {
return id;
}
public String getUrl() {
return url;
}
public void setId(int id) {
this.id = id;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String toString() {
return "UrlModel{" +
"id=" + id +
", url='" + url + '\'' +
'}';
}
}
Класс TestHibernate:
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class TestHibernate {
public static void main(String[] args){
new TestHibernate().startTestHibernate();
}
private void startTestHibernate(){
EntityManager entityManager = getEntityManager();
entityManager.getTransaction().begin();
UrlModel urlModel = new UrlModel(1, "https://www.github.com");
entityManager.persist(urlModel);
entityManager.getTransaction().commit();
}
private static EntityManager getEntityManager() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceTest");
return emf.createEntityManager();
}
}
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="persistenceTest"
transaction-type="RESOURCE_LOCAL">
<!--<description>Hibernate EntityManager Demo</description>-->
<class>Hibernate.model.UrlModel</class>
<!--<exclude-unlisted-classes>true</exclude-unlisted-classes>-->
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>
<property name="javax.persistence.jdbc.user" value="postgres"/>
<property name="javax.persistence.jdbc.password" value="admin"/>
</properties>
</persistence-unit>
</persistence>
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
Добавляя аннотацию @GeneratedValue
Вы указываете Hibernate-у генерировать идентификатор. В тоже время
UrlModel urlModel = new UrlModel(1, "https://www.github.com");
Вы самостоятельно присваиваете идентификатор сущности при ее создании. При вызове метода persist
entityManager.persist(urlModel);
Hibernate видит, что у сущности уже есть идентификатор и выкидывает ошибку. Все что нужно сделать, это не присваивать значение для поля id
и не использовать примитивный тип для идентификатора:
@Entity
public class UrlModel {
@Id
@GeneratedValue
private Long id;
private String url;
// Этот конструктор будет использовать только Hibernate
protected UrlModel() {}
public UrlModel(String url) {
this.url = url;
}
// Геттеры, сеттеры
// Метод setId() не нужен!
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мне требуется логировать подготовленные запросы в groovy
Есть родительский класс,который является абстракцией при создании экземпляров дочерних классовКак можно с инстанса родителя, получить...
Реализую телеграм бота для парсингаПрокси работает, бот отвечает на слова, а вот парсинг работает не как ожидается и не выводит на экран почему?
Сделал два эксперимента с использованием javaFx и Swing где оба этих проекта заворачиваю в банку (Eclipse)первым экспортировал Swing проект по двойному...