Hibernate之映射值类型集合(组件的集合之set)

在使用set集合时,如果集合中的元素是组件类或者是实体类,那么编写组件类或实体类时一定要实现equals()和hashCode()。


 

pom.xml:

 

 

resources/hibernate.cfg.xml:

 

 

pojo/Image.java:

 

 

pojo/Item.java:

 

 

pojo/Item.hbm.xml:

注意:<composite-element>中的property中都必须加not-null="true"

 

 

util/HibernateUtil.java:

 

 

util/Manager.java:

 

 

表结构:

 

 

输出sql与日志:

 

 

 


 

 

 

上例中,Image是Item的一个组件,Item则是负责Image实例的生命周期的实体。

首先,把Image类实现为一般的POJO。由于组件类没有标识符属性,你必须实现equals()(和hashCode()),并比较name,fileName,sizeX,sizeY属性。hibernate依赖这个等同性子程序检查实例中的修改。并非所有的组件类都需要equals()和hashCode()的定制实现。但是,我们建议把它用于任何组件类,因为这种实现很简单,并且"小心不出大错”可是至理名言。

 

组件的集合被类似地映射到JDK值类型的集合。唯一的区别是用<composite-element>代替了<element>标签。

这是一个集,因此集合表的主键是键列和所有元素列的一个复合。ITEM_ID,IMAGENAME,FILENAME,SIZEX,SIXEY。因为这些列都出现在主键中,需要用not-null="true"声明它们。复合主键中任何列都不可以为空---因为你无法辨别不知道的东西,这可能是这个特定映射的一个缺点。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值