hibernate中复合主键

复合主键:一张表的多个字段组合构成这张表的主键,这个主键就叫复合主键。

在hibernate中配置复合主键:

Hibernate复合主键的编写有两种情况:

1、将复合主键各字段定义为私有属性。

2、将复合主键字段抽取出来定义一个主键类(暂且这样称呼),在实体类中包含主键类即可。(推荐使用这种方法)

映射文件的编写:

复合主键使用:

方式一:

<composite-id>

<key-property name=”” column=”” type=””/>

<key-property name=”” column=”” type=””/>

</composite-id>

由几个字段构成添加几个<key-property>标签。

name是私有属性名,

column是映射的字段名(可省略,省略后将以私有属性名作为字段名),

type是数据的类型

方式二:

<composite-idname=”” class=””>

<key-property name=”” column=”” type=””/>

<key-property name=”” column=”” type=””/>

</composite-id>

<composite-idname=”” class=””> name是主键类在实体类的私有属性名,class是主键类的类名。

 

实际操作:

User是实体类,Name是主键类

方式一:

保存的时候:session.save(User.class,user);

方式二:

保存的时候:实体类对象先保存主键类,然后session保存实体类对象。 user.setName(name);,session.save(user);

查询的时候:需要制定主键信息,session.get(实体类对象,主键类对象)。

session.get(user,name);

 

 

 

还有一种说法:

在hibernate中有复合主键的类必须满足两个条件:

1、类必须显现serializable接口。

2、重写equals和hashCode方法。

对于为什么要满足以上的条件,我找了一些资料,原因是hibernate将此作为标识来区分复合主键类和其它实体类。(觉得这样的解释有点牵强,希望有高手解答)

其他的配置和注意细节和上面的说法一样。


equals和hasCode方法的编写。


equal方法

publicboolean equals(Object obj){

if(this==obj){

           returntrue;

}

if(!obj.instanceOf(Person)){

             return false;

}

returnsuper.equals(obj);

}

 

hasCode方法

publicint hashCode(){

returnsuper.hashCode();

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值