【问题标题】:Hibernate One to One XML mapping not inserting foreign key休眠一对一 XML 映射不插入外键
【发布时间】:2016-10-29 22:15:14
【问题描述】:

我有这些课程:

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();

现在,问题是孩子被插入到数据库中,但外键没有!这让我的孩子们被抛弃了!请救救我的孩子:( 我做错了什么?

我尝试在父端移动外键列..仍然没有..Hibernate 怎么知道 parent_id 或 child_id 列是外键?

【问题讨论】:

    标签: java xml hibernate one-to-one


    【解决方案1】:

    我将代码更改为以下内容后它起作用了:

    将 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。

    希望这对某人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 2017-12-05
      • 2011-04-07
      • 1970-01-01
      相关资源
      最近更新 更多