孙卫琴的《精通JPA与Hibernate》的读书笔记:映射Bag包(值类型的集合)
16lz
2021-05-05
Bag集合中的对象不按特定方式排序,但是允许有重复对象。在Java集合API中并没有提供Bag接口,Hibernate允许在持久化类中用List来模拟Bag的行为。假定Customer对象的images集合中允许存放重复的照片文件名,可以把images属性定义为List类型:
private List<String> images=new ArrayList<String>();
在数据库中定义了一张IMAGES表,它的CUSTOMER_ID字段为参照CUSTOMERS表的外键,由于Customer对象允许有重复的照片文件名,因此应该在IMAGES表中定义一个代理主键ID。
以下是IMAGES表的DDL定义:
create table IMAGES( ID bigint not null, CUSTOMER_ID bigint not null, FILENAME varchar(15) not null, primary key (ID), foreign key (CUSTOMER_ID) references CUSTOMERS(ID));
在Customer类中,映射Customer类的images属性的代码如下:
@ElementCollection@CollectionTable(name="IMAGES", joinColumns=@JoinColumn(name="CUSTOMER_ID"))@Column(name="FILENAME")@CollectionId(columns=@Column(name="ID"), type=@Type(type="long"), generator="increment") private List<String> images=new ArrayList<String>();
@CollectionId注解来自于org.hibernate.annotations包,指定IMAGES表的主键为ID,它的映射类型为“long”,它采用“increment”标识符生成策略。
好知识,才能预见未来
赞赏
0人进行了赞赏支持
更多相关文章
- 4.14 vSphere许可术语和定义
- 帮你光速脱单!程序员找对象指南
- 如何在定义局部变量时赋初始值
- 学 Win32 汇编[31] - 结构与联合
- Delphi XE2 之 FireMonkey 入门(34) - 控件基础: TFmxObject: 克
- Delphi 中的自动释放策略
- 路由知识、基于锚点的哈希模式路由、使用vue路由模块路由、用历
- Laravel 添加自定义函数
- JavaScript遍历对象方法总结