从下至上的第三个数据库命令是DELETE FROM Person_Phone 在哪里Person_id = 1 为什么删除个人ID而不是直接删除电话ID? 特别是因为那是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
答案 0 :(得分:1)
在您提供的链接中,所有关联都定义了一个层叠属性,这意味着每当一个事件被触发(插入,更新,删除...),它们都将遵循其中的层叠类型值,因此它们都已设置为级联类型。这意味着每当父母被删除(例如插入)时,他所有的孩子也将被删除(例如插入)
如果您想了解更多有关此行为的信息,这里是一个不错的article