Hibernate之映射值类型集合(映射ibag)

pom.xml:

 

 

resources/hibernate.cfg.xml:

 

 

pojo/Item.java:

 

 

pojo/Item.hbm.xml:

根据测试,集合中如果有null值,它是不会被插入到集合表中的,也不会报错。

 

util/HibernateUtil.java:

 

 

util/Manager.java:

 

表结构:

 

 

输出sql:

 

 

 


 

 

 

允许重复元素的无序集合被称作包(bag)。奇怪的是,java Collections框架没有包括包实现。然而,java.util.Collection接口有包语义,因此只需要一种相匹配的实现。你有两种选择:

 

. 用java.util.Collection接口编写集合属性,并在声明中用JDK的一个ArrayList对它进行初始化。在hibernate中用标准的<bag>或<idbag>元素映射集合。hibernate有一个内建的PersistemntBag可以处理列表;但与包的约定一致,它忽略元素在ArrayList中的位置。换句话说,你得到了一个持久化的Collection。

. 用java.util.List接口编写集合属性,并在声明中用JDK的一个ArrayList把它初始化。像前一个选项一样映射它,但是在领域模型类中公开了一个不同的集合接口。这种方法有效,但不建议使用,因为使用这个集合属性的客户端可能认为元素的顺序会始终被保存着,其实如果把它作为<bag>或者<idbag>映射,就并非如此了。

 

建议使用第一个选项。

 

 

上例中,表需要一个不同的主键,<idbag>映射添加了一个代理键列到集合表,很像用于实体类的合成标识符.

注意:主键的native生成器不支持<idbag>映射,必须指定一种具体的策略。还要注意:ITEM_IMAGE_ID列没有以任何方式公开给应用程序。Hibernate内部管理它。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值