Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate - delete detached entity / 5 сообщений из 5, страница 1 из 1
23.11.2020, 15:09
    #40021416
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate - delete detached entity
В доке по хиберу написано ( https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#pc-remove)
Код: java
1.
2.
3.
4.
5.
Hibernate itself can handle deleting entities in detached state. JPA, however, disallows this behavior.

The implication here is that the entity instance passed to the org.hibernate.
Session delete method can be either in managed or detached state, 
while the entity instance passed to remove on javax.persistence.EntityManager must be in the managed state.



Тестовый код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Id;
import javax.persistence.Persistence;

import org.hibernate.Session;


public class Test01 {
	public static void main(String[] args) {
		EntityManagerFactory entityManagerFactory = Persistence
				.createEntityManagerFactory("HBM");

		EntityManager entityManager = entityManagerFactory.createEntityManager();
		entityManager.getTransaction().begin();

		long ID = 1L;
		
		SomeEntity en = new SomeEntity();
		en.setId(ID);
		en.setName("Name");
		entityManager.persist(en);
		
		entityManager.flush();
		entityManager.clear();
		
		Session session = entityManager.unwrap(Session.class);
		SomeEntity en2 = session.get(SomeEntity.class, ID);
	
		System.out.println(en2);
		session.detach(en2);
		session.delete(en2);
		
		entityManager.getTransaction().commit();
		entityManager.close();
		entityManagerFactory.close();
	}
}

@Entity
class SomeEntity {
	
	@Id
	private long id;
	private String name;
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "SomeEntity [id=" + id + ", name=" + name + "]";
	}

}



Если я правильно понял, то Session.delete() метод должен удалять как persistent, так и detached entities.
Но у меня вываливается ошибка:
Код: java
1.
Exception in thread "main" java.lang.IllegalArgumentException: Removing a detached instance by.pva.hibernate.part01._tests.SomeEntity#1
...
Рейтинг: 0 / 0
23.11.2020, 15:25
    #40021423
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate - delete detached entity
faustgreen,
Отсоединил от бд и потом удаляем? Какоц смысл?
...
Рейтинг: 0 / 0
23.11.2020, 15:38
    #40021431
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate - delete detached entity
Интересует знчение фразы "Hibernate itself can handle deleting entities in detached state."

session.detach() вроде бы переводит entity как раз таки в detached состояние.
Код: java
1.
2.
3.
void javax.persistence.EntityManager.detach(Object entity)

Remove the given entity from the persistence context, causing a managed entity to become detached
...
Рейтинг: 0 / 0
23.11.2020, 15:42
    #40021434
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate - delete detached entity
Задача скорее теоретическая, чем практическая. Может оно никогда и не понадобится, просто интересно разобраться.
...
Рейтинг: 0 / 0
23.11.2020, 15:51
    #40021441
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate - delete detached entity
faustgreen
Задача скорее теоретическая, чем практическая. Может оно никогда и не понадобится, просто интересно разобраться.
по опыту, то что никому не нужно работает плохо.
"Что будет если кошку помыть в стиральной машинке?"
Найди практический вопрос.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate - delete detached entity / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]