首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate一对一的XML映射没有插入外键

Hibernate一对一的XML映射没有插入外键
EN

Stack Overflow用户
提问于 2016-10-29 22:15:14
回答 1查看 796关注 0票数 1

我有这样的课程:

代码语言:javascript
运行
复制
class Parent {
    private int parentId;
    private Child child;
}

class Child {
    private int childId;
    private Parent parent;
}

以及以下XML映射:

代码语言:javascript
运行
复制
<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数据库如下所示:

代码语言:javascript
运行
复制
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)

现在,让我们尝试更新他们!

代码语言:javascript
运行
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-29 22:54:00

在我将代码更改为以下代码后,它就起了作用:

将XML映射更改为:

代码语言:javascript
运行
复制
<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代码更改为:

代码语言:javascript
运行
复制
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。

希望这能帮到别人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40324231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档