Hibernate学习笔记(六)
2010-08-31 15:50
423 查看
值类型的集合
让我们在Person实体里添加一个电子邮件的集合。这将以
java.lang.String实例的
java.util.Set出现:
privateSetemailAddresses=newHashSet();
publicSetgetEmailAddresses(){
returnemailAddresses;
}
publicvoidsetEmailAddresses(SetemailAddresses){
this.emailAddresses=emailAddresses;
}
这个
Set的映射如下:
<setname="emailAddresses"table="PERSON_EMAIL_ADDR">
<keycolumn="PERSON_ID"/>
<elementtype="string"column="EMAIL_ADDR"/>
</set
>
比较这次和此前映射的差别,主要在于
element部分,这次并没有包含对其它实体引用的集合,而是元素类型为
String的集合(在映射中使用小写的名字”string“是向你表明它是一个Hibernate的映射类型或者类型转换器)。和之前一样,
set元素的
table属性决定了用于集合的表名。
key元素定义了在集合表中外键的字段名。
element元素的
column属性定义用于实际保存
String值的字段名。
你可以看到集合表的主键实际上是个复合主键,同时使用了两个字段。这也暗示了对于同一个person不能有重复的email地址,这正是Java里面使用Set时候所需要的语义(Set里元素不能重复)。
你现在可以试着把元素加入到这个集合,就像我们在之前关联person和event的那样。其实现的Java代码是相同的:
privatevoidaddEmailToPerson(LongpersonId,StringemailAddress){
Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
PersonaPerson=(Person)session.load(Person.class,personId);
//addingtotheemailAddresscollectionmighttriggeralazyloadofthecollection
aPerson.getEmailAddresses().add(emailAddress);
session.getTransaction().commit();
}
这次我们没有使用fetch查询来初始化集合。因此,调用其getter方法会触发另一附加的select来初始化集合,这样我们才能把元素添加进去。检查SQLlog,试着通过预先抓取来优化它。
相关文章推荐
- 【Hibernate学习笔记-3】在Spring下整合Hibernate时, 关于sessionFactory的类型的说明
- hibernate3.3.2学习笔记 --- fetch
- hibernate3.3.2学习笔记---多对多CRUD
- 学习部署struts+hibernate例子--PowerAcl的笔记
- Hibernate学习笔记总结(三)——Hibernate 3.x——HQL查询语言(重点)
- Hibernate_学习笔记
- [学习]Hibernate 3.2 学习笔记之一
- [原创]java WEB学习笔记83:Hibernate学习之路---双向 1-n介绍,关键点解释,代码实现,set属性介绍(inverse,cascade ,order-by )
- [原创]java WEB学习笔记88:Hibernate学习之路-- -Hibernate检索策略(立即检索,延迟检索,迫切左外连接检索)
- 【Hibernate学习笔记-5】@Formula注解的使用
- Hibernate的学习笔记(4)
- Hibernate学习笔记之持久化实现
- Hibernate 学习笔记(7)
- Hibernate二级缓存的注解(学习笔记)
- Java.Web学习笔记 Hibernate
- Sping学习笔记_整合hibernate
- Hibernate学习笔记_关系映射_树状结构练习
- Hibernate视频学习笔记(5)SessionFlush简介
- Hibernate学习笔记--第一篇 初学入门第一个例子
- Hibernate学习笔记----Session管理和批量操作