Hibernate中如何处理一对多关系中的组合主键

原创 2004年07月06日 11:57:00

前段时间碰到这个问题,主要是hbm文件的的写法问题。我建了两个表,parent中的Pid与child中的Cid是一对多关系,Child中的cid与otherid只组合主键.如下

parent

字段名       

类型

长度

Pid  (PK)

Character

10

Name

Character

10

 Child

字段名   

类型

长度

cid       (PK)

Character

10

Otherid    (PK)

Smallint

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Name

Character

10

hbm文件:

Parent.hbm.xml

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
<class name="Parent" table="parent">
<id
            name="pid"
            column="pid"
            type="string"
            unsaved-value="any"
        >
            <generator class="assigned"/>
        </id>
<property name="name"/>
<set name="children" cascade="all-delete-orphan" inverse="true" lazy="true" >
        <key column="CID" />
        <one-to-many class="Child"/>
 </set>
</class>
</hibernate-mapping>

Child.hbm.xml

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
<class name="Child" table="child">
<composite-id name="childpk" class="Childpk" unsaved-value="any">
<key-many-to-one name="parent" class="Parent" column="cid" />
<key-property name="otherid" column="otherid" type="integer"/>
</composite-id>
<many-to-one name="parent" class="Parent" column="CID" cascade="save-update" not-null="true" update="false" insert="false" />
<property name="name" column="name" type="string" />
</class>
</hibernate-mapping>

这两个hbm文件里面主要是:Parent中的<set name="children" cascade="all-delete-orphan" inverse="true" lazy="true" >
        <key column="CID" />
        <one-to-many class="Child"/>
 </set> 和Child中的<many-to-one name="parent" class="Parent" column="CID" cascade="save-update" not-null="true" update="false" insert="false" />

这两个构成一对多关系中组合主键的双向关联。另外在写PO类的时候要注意hashcode和equals写的正确

 

Hibernate开发框架

-
  • 1970年01月01日 08:00

hibernate联合主键生成策略以及一对多配置

1:一般能用一个字段做主键的就不要用两个字段,不过不可避免的会遇到要用两个字段做主键,此时要用hibernate,可以使用联合主键。如图:要用id和name做主键 办法:单独设计一个类,起名St...
  • fjseryi
  • fjseryi
  • 2016-07-16 08:39:50
  • 2150

hibernate 基于主键的一对多关联 补充

http://blog.csdn.net/longyuan20102011/article/details/7718771 数据库建立的时候要注意 在多端,也就是employee端,需要建...
  • longyuan20102011
  • longyuan20102011
  • 2012-10-09 11:12:45
  • 306

Hibernate注解版多对一关系的几个注意点

1.双向多对一和一对多 注解版 双向一对多关系,一是关系维护端(owner side),多是关系被维护端(inverse side)。在关系被维护端需要通过@JoinColumn建立...
  • he90227
  • he90227
  • 2014-09-11 13:30:24
  • 4927

Hibernate多对多之中间表只有两个外键做联合主键

一般情况下,多对多的关联关系是需要中间表的; 情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只需要写出两张主表的mode...
  • u014038534
  • u014038534
  • 2015-12-02 21:26:21
  • 2013

关于Hibernate使用组合主键时,组合主键中有些字段为null时的解决方法

当使用视图进行查询的时候,经常会使用组合主键的方式。 在hibernate中,配置在组合主键中的字段,若只要有一个的值为null那么,hibernate会将整行对应的实体置为null。 有时候...
  • sl_nevergiveup
  • sl_nevergiveup
  • 2011-12-16 16:21:21
  • 3356

【数据表间关联关系】 一对多、多对一、一对一、多对多

关联映射:一对多/多对一 存在最普遍的映射关系,简单来讲就如球员与球队的关系; 一对多:从球队角度来说一个球队拥有多个球员 即为一对多 多对一:从球员角度来说多个球员属于一个球队 即为多对一 ...
  • guomutian911
  • guomutian911
  • 2016-06-02 09:51:25
  • 2711

Hibernate多对多双向关联

以Student和Course为例,一个学生可以选多门课程,一门课程也可以被多个学生选取; 持久化类Student: package bean; import java.util.Set; ...
  • jialinqiang
  • jialinqiang
  • 2013-03-21 11:49:08
  • 15547

hibernate基于主键的双向多对多的关联映射

2、类Role 和Function类 Fole: public class Role { private int id; private String name; private Set fun...
  • liusocg520
  • liusocg520
  • 2016-04-21 08:53:40
  • 861

hibernate 多对多 中间表主键问题 及id生成方式

hibernate多对多中间表,一般都是两个外键,例如用户表(user),主键:userid. 角色表(role),主键:roleid. 中间表字段为两个外键:userid,roleid作为联合主键。...
  • ycyangcai
  • ycyangcai
  • 2010-11-01 14:11:00
  • 1645
收藏助手
不良信息举报
您举报文章:Hibernate中如何处理一对多关系中的组合主键
举报原因:
原因补充:

(最多只允许输入30个字)