Hibernate(4.2.7):了解CascadeType PERSIST

时间:2013-12-12 07:48:45

标签: java mysql hibernate jpa

我在我的类中使用 cascade = CascadeType.PERSIST ,对应于下面给出的子表(PAT)。

...
@ManyToOne(cascade=CascadeType.PERSIST)
private Neighbourhood nh;
...

邻居类代表父表(NH)。

Here is the database relationship:

SQL生成:

Hibernate: select neighbourh_.CODE, neighbourh_.NAME as NAME2_0_ from NH neighbourh_ where neighbourh_.CODE=?
Hibernate: insert into PAT (DOB, DOOR_NUM, EMAIL, FIRST_NAME, HEIGHT, IS_MALE, LAST_NAME, LINE1, LINE2, MOBILE, nh_CODE, PHONE_HOME, PHONE_OFFICE, POSTAL_CODE, WEB, WEIGHT, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

问题

当我尝试将记录保存到子表(PAT)时,不会创建进入父表(NH)的条目。我希望在父表和子表中创建一个条目。

这不是CascadeType.PERSIST应该做的吗?

1 个答案:

答案 0 :(得分:1)

是的,这就是坚持应该做的事情。鉴于上面的细节我不能确定为什么它没有插入,但我可以猜测:

当您使用子表(Pat)插入时,

您的Neighborhood实体具有已存在于DB中的PrimaryKey code。这就是它在第一个查询中查找它的原因。因此,如果邻居代码不在那里,它将为它插入一个SQL。