Java 冬眠一天,自然PK

Java 冬眠一天,自然PK,java,hibernate,one-to-many,hibernate-onetomany,Java,Hibernate,One To Many,Hibernate Onetomany,我对建立一对夫妇的关系有意见 我的数据库模式: TABLE PARENT ( VENDOR, CHANNEL, CREATEDATE, REFID, ... ) UNIQUE INDEX PK_PARENT (VENDOR, CHANNEL, CREATEDATE, REFID) TABLE CHILD ( REFID, NAME, ) UNIQUE INDEX PK_CHILD (REFID, NAME) 和Java类 public class Parent { String ve

我对建立一对夫妇的关系有意见

我的数据库模式:

TABLE PARENT (
VENDOR,
CHANNEL,
CREATEDATE,
REFID,
...
)
UNIQUE INDEX PK_PARENT (VENDOR, CHANNEL, CREATEDATE, REFID)

TABLE CHILD (
REFID,
NAME,
)
UNIQUE INDEX PK_CHILD (REFID, NAME)
和Java类

public class Parent {
    String vendor;
    String channel;
    Date createdate;
    Long refid;
    List<Child> childs;
    ...
}

public class Child {
    Long refid;
    String name;
}

有什么想法吗?

因为您的子实体有一个复杂的键,所以在父实体中您需要将外键也指定为复杂键。

因为您的子实体有一个复杂的键,因此,在父实体中,您还需要将外键指定为complex。

根据hibernate配置xml文件中的java类字段更改属性名称。如果java类中有一个“channel”字段,那么在hbm配置中应该将其命名为“channel”,尽管它是复合主键的一部分

<class name="Parent" table="PARENT">
<composite-id >
    <key-property name="vendor" type="string">
        <column name="VENDOR" />
    </key-property>
    <key-property name="channel" type="string">
        <column name="CHANNEL" />
    </key-property>
    <key-property name="createdate" type="Date">
        <column name="CREATEDATE" />
    </key-property>
    <key-property name="refid" type="Long">
        <column name="REFID" />
    </key-property>
<composite-id />
<list name="childs" table="CHILD" lazy="true" fetch="select">
    <key column="REFID" />
    <index column="REFID" />
    <one-to-many class="Child" />
</list>


此外,还应在映射的另一端定义多个关系。子类中可以有一个正确的父实例(而不仅仅是一个ID)

根据hibernate配置xml文件中的java类字段更改属性名称。如果java类中有一个“channel”字段,那么在hbm配置中应该将其命名为“channel”,尽管它是复合主键的一部分

<class name="Parent" table="PARENT">
<composite-id >
    <key-property name="vendor" type="string">
        <column name="VENDOR" />
    </key-property>
    <key-property name="channel" type="string">
        <column name="CHANNEL" />
    </key-property>
    <key-property name="createdate" type="Date">
        <column name="CREATEDATE" />
    </key-property>
    <key-property name="refid" type="Long">
        <column name="REFID" />
    </key-property>
<composite-id />
<list name="childs" table="CHILD" lazy="true" fetch="select">
    <key column="REFID" />
    <index column="REFID" />
    <one-to-many class="Child" />
</list>

此外,还应在映射的另一端定义多个关系。并且子类中可以正确地存在父实例(而不仅仅是ID)

<class name="Parent" table="PARENT">
<composite-id >
    <key-property name="vendor" type="string">
        <column name="VENDOR" />
    </key-property>
    <key-property name="channel" type="string">
        <column name="CHANNEL" />
    </key-property>
    <key-property name="createdate" type="Date">
        <column name="CREATEDATE" />
    </key-property>
    <key-property name="refid" type="Long">
        <column name="REFID" />
    </key-property>
<composite-id />
<list name="childs" table="CHILD" lazy="true" fetch="select">
    <key column="REFID" />
    <index column="REFID" />
    <one-to-many class="Child" />
</list>