hibernate.hbm.xml对值类型的集合的配置

原创 2015年11月18日 22:09:04

1.3.4.  值类型的集合

我们把一个值类型对象的集合加入Person实体中。我们希望保存email地址,所以使用String类型,而且这次的集合类型又是Set

private Set emailAddresses = new HashSet();

public Set getEmailAddresses() {
    return emailAddresses;
}

public void setEmailAddresses(Set emailAddresses) {
    this.emailAddresses = emailAddresses;
}

这个Set的映射

<set name="emailAddresses" table="PERSON_EMAIL_ADDR">
    <key column="PERSON_ID"/>
    <element type="string" column="EMAIL_ADDR"/>
</set>

比较这次和此前映射的差别,主要在于element部分,这次并没有包含对其它实体引用的集合,而是元素类型为String的集合(在映射中使用小写的名字”string“是向你表明它是一个Hibernate的映射类型或者类型转换器)。和之前一样,set元素的table属性决定了用于集合的表名。key元素定义了在集合表中外键的字段名。element元素的column属性定义用于实际保存String值的字段名。

看一下修改后的数据库schema。

  _____________        __________________
 |             |      |                  |       _____________
 |   EVENTS    |      |   PERSON_EVENT   |      |             |       ___________________
 |_____________|      |__________________|      |    PERSON   |      |                   |
 |             |      |                  |      |_____________|      | PERSON_EMAIL_ADDR |
 | *EVENT_ID   | <--> | *EVENT_ID        |      |             |      |___________________|
 |  EVENT_DATE |      | *PERSON_ID       | <--> | *PERSON_ID  | <--> |  *PERSON_ID       |
 |  TITLE      |      |__________________|      |  AGE        |      |  *EMAIL_ADDR      |
 |_____________|                                |  FIRSTNAME  |      |___________________|
                                                |  LASTNAME   |
                                                |_____________|
 

你可以看到集合表的主键实际上是个复合主键,同时使用了2个字段。这也暗示了对于同一个person不能有重复的email地址,这正是Java里面使用Set时候所需要的语义(Set里元素不能重复)。

你现在可以试着把元素加入到这个集合,就像我们在之前关联person和event的那样。其实现的Java代码是相同的:

private void addEmailToPerson(Long personId, String emailAddress) {

    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();

    Person aPerson = (Person) session.load(Person.class, personId);

    // The getEmailAddresses() might trigger a lazy load of the collection
    aPerson.getEmailAddresses().add(emailAddress);

    session.getTransaction().commit();
}

这次我们没有使用fetch查询来初始化集合。因此,调用其getter方法会触发另一附加的select来初始化集合,这样我们才能把元素添加进去。检查SQL log,试着通过预先抓取来优化它。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【转】【Hibernate总结系列】....hbm.xml配置

在Hibernate中,各表的映射文件….hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具。本节简单的讲述一下这些配置文件的配置。        配...

hibernate.hbm.xml配置

intellij配置hibernate自动生成hbm.xml文件

intellij配置hibernate自动生成hbm.xml文件

hibernate映射文件??.hbm.xml配置映射元素详解

hibernate对象关系的映射是用一个XML文档来说明的。 映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等。 下面从一个映射的例子开始了解映射元素,映射文件...

【Hibernate总结系列】....hbm.xml配置

在Hibernate中,各表的映射文件….hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具。本节简单的讲述一下这些配置文件的配置。       ...

【Hibernate总结系列】....hbm.xml配置

【Hibernate总结系列】....hbm.xml配置       在Hibernate中,各表的映射文件….hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映...

hibernate.hbm.xml配置

<!-- 一般不去配置,采用默认即可。 default-cascade="none":默认的级联风格,表与表

intellij配置hibernate自动生成hbm.xml文件

intellij配置hibernate自动生成hbm.xml文件(亲测有用) 在使用intellij开发Java web项目的时候,会遇到hibernate中hbm.xml文件不知道在哪里创...

hibernate *.hbm.xml文件的配置

hibernate *.hbm.xml文件的配置 <!-- pac

hibernate映射配置文件(xxx.hbm.xml)内容及作用

hibernate映射配置文件用于配置与数据库表之间的映射关系,(通过配置映射关系,在启动项目的时候,hibernate就会生成相对应的数据表,但是数据库得自己建)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)