|
本文参考《精通JPA与Hibernate:Java对象持久化技术详解》,作者:孙卫琴,清华大学出版社出版
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。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](20210504180017649.html#piccenter)
以下是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”标识符生成策略。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/5ea09f797d337ba205b96c61e7be9cd4.png)
程序猿的技术大观园:www.javathinker.net
[这个贴子最后由 admin 在 2021-10-09 10:47:28 重新编辑]
|
|