我有这样的课程:
class Parent {
private int parentId;
private Child child;
}
class Child {
private int childId;
private Parent parent;
}
以及以下XML映射:
<hibernate-mapping>
<class name="com.package.Parent" table="PARENT">
<id name="id" type="int" column="parent_col_id"/>
<one-to-one name="child" class="com.package.Child">
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.package.Child" table="Child">
<id name="id" type="int" column="child_col_id"/>
<one-to-one name="Parent" class="com.package.Parent">
</class>
</hibernate-mapping>
MySQL数据库如下所示:
ParentDB
parent_col_id INT(11) PK NN AI
ChildDB
child_col_id INT(11) PK NN AI
name VARCHAR(45) (none checked)
parent_id INT(11) (none checked)
现在,让我们尝试更新他们!
Session hSession = sessionService.openSession();
Parent parent = hSession.get(Parent.class, parentId);
Child child = new Child();
child.setName = "CooCoo";
parent.setChild(child);
childRepo.insert(child, hSession);
hSession.close();
现在,问题是子键被插入到DB中,但是外键不是!这就让我的孩子被遗弃了!请救救我的孩子:(我做错什么了?
我试着移动父侧的外键列。还是什么都没有..。Hibernate如何知道parent_id或child_id列是外来id?
发布于 2016-10-29 22:54:00
在我将代码更改为以下代码后,它就起了作用:
将XML映射更改为:
<hibernate-mapping>
<class name="com.package.Parent" table="PARENT">
<id name="id" type="int" column="parent_col_id"/>
<one-to-one name="child" class="com.package.Child" cascade="all"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.package.Child" table="Child">
<id name="id" type="int" column="child_col_id">
<generator class="foreign">
<param name="property">parent</param>
</generator>
</id>
<one-to-one name="Parent" class="com.package.Parent">
</class>
</hibernate-mapping>
将java代码更改为:
Session hSession = sessionService.openSession();
Parent parent = hSession.get(Parent.class, parentId);
Child child = new Child();
child.setName = "CooCoo";
parent.setChild(child);
child.setParent(parent);
parentRepo.update(parent, hSession);
hSession.close();
在MySQL中,parent_id列被删除,因为外部ID被设置为主键ID。
希望这能帮到别人!
https://stackoverflow.com/questions/40324231
复制相似问题