Hibernate. Почему удаление одного ребенка приводит к удалению всего ребенка в однонаправленной ассоциации один ко многим? - PullRequest
0 голосов
/ 19 ноября 2018

Третья команда базы данных снизу вверх - УДАЛИТЬ ИЗ Person_Phone, ГДЕ Person_id = 1, зачем удалять идентификатор человека вместо прямого удаления идентификатора телефона?тем более, что именно это Java-код явно делает с person.getPhones (). remove (phone1).PS.Я скопировал приведенный ниже код по этой ссылке http://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#associations

//this is Java code
Person person = new Person();
Phone phone1 = new Phone( "123-456-7890" );
Phone phone2 = new Phone( "321-654-0987" );

person.getPhones().add( phone1 );
person.getPhones().add( phone2 );
entityManager.persist( person );
entityManager.flush();

person.getPhones().remove( phone1 );

//this is the database generated code
INSERT INTO Person
       ( id )
VALUES ( 1 )

INSERT INTO Phone
       ( number, id )
VALUES ( '123-456-7890', 2 )

INSERT INTO Phone
       ( number, id )
VALUES ( '321-654-0987', 3 )

INSERT INTO Person_Phone
       ( Person_id, phones_id )
VALUES ( 1, 2 )

INSERT INTO Person_Phone
       ( Person_id, phones_id )
VALUES ( 1, 3 )

DELETE FROM Person_Phone
WHERE  Person_id = 1

INSERT INTO Person_Phone
       ( Person_id, phones_id )
VALUES ( 1, 3 )

DELETE FROM Phone
WHERE  id = 2

1 Ответ

0 голосов
/ 19 ноября 2018

в ссылке, которую вы предоставили, все ассоциации имеют определенное свойство каскада, что означает, что они будут следовать значению каскадного типа в нем всякий раз, когда событие инициируется (вставка, обновление, удаление ...), так как все они установлены в cascadeType.Все это означает, что всякий раз, когда родитель удаляется (например, вставка), также удаляется весь его ребенок (например, вставка),

вот хорошая статья , если вы хотите больше узнать об этомповедение

...