集合例子

来源:互联网 发布:175平台cs1.6数据查询 编辑:程序博客网 时间:2024/04/29 19:17
package eg;import java.util.Set;public class Parent {    private long id;    private Set children;    public long getId() { return id; }    private void setId(long id) { this.id=id; }    private Set getChildren() { return children; }    private void setChildren(Set children) { this.children=children; }    ....    ....}


这个类有一个Child的实例集合。如果每一个子实例至多有一个父实例, 那么最自然的映射是一个one-to-many的关联关系:

 

<hibernate-mapping>    <class name="Parent">        <id name="id">            <generator class="sequence"/>        </id>        <set name="children">            <key column="parent_id"/>            <one-to-many class="Child"/>        </set>    </class>    <class name="Child">        <id name="id">            <generator class="sequence"/>        </id>        <property name="name"/>    </class></hibernate-mapping>


在以下的表定义中反应了这个映射关系:

create table parent ( id bigint not null primary key )create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )alter table child add constraint childfk0 (parent_id) references parent


如果父亲是必须的, 那么就可以使用双向one-to-many的关联了:

<hibernate-mapping>    <class name="Parent">        <id name="id">            <generator class="sequence"/>        </id>        <set name="children" inverse="true">            <key column="parent_id"/>            <one-to-many class="Child"/>        </set>    </class>    <class name="Child">        <id name="id">            <generator class="sequence"/>        </id>        <property name="name"/>        <many-to-one name="parent" class="Parent" column="parent_id" not-null="true"/>    </class></hibernate-mapping>

请注意NOT NULL的约束:

create table parent ( id bigint not null primary key )create table child ( id bigint not null                     primary key,                     name varchar(255),                     parent_id bigint not null )alter table child add constraint childfk0 (parent_id) references parent


 

另外,如果你绝对坚持这个关联应该是单向的,你可以对<key>映射声明NOT NULL约束:

<hibernate-mapping>    <class name="Parent">        <id name="id">            <generator class="sequence"/>        </id>        <set name="children">            <key column="parent_id" not-null="true"/>            <one-to-many class="Child"/>        </set>    </class>    <class name="Child">        <id name="id">            <generator class="sequence"/>        </id>        <property name="name"/>    </class></hibernate-mapping>


 

另外一方面,如果一个子实例可能有多个父实例, 那么就应该使用many-to-many关联:

<hibernate-mapping>    <class name="Parent">        <id name="id">            <generator class="sequence"/>        </id>        <set name="children" table="childset">            <key column="parent_id"/>            <many-to-many class="Child" column="child_id"/>        </set>    </class>    <class name="Child">        <id name="id">            <generator class="sequence"/>        </id>        <property name="name"/>    </class></hibernate-mapping>


 

表定义:

create table parent ( id bigint not null primary key )create table child ( id bigint not null primary key, name varchar(255) )create table childset ( parent_id bigint not null,                        child_id bigint not null,                        primary key ( parent_id, child_id ) )alter table childset add constraint childsetfk0 (parent_id) references parentalter table childset add constraint childsetfk1 (child_id) references child



 

	
				
		
原创粉丝点击