`
jzkangta
  • 浏览: 157827 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate关联映射(二)一对多

阅读更多
一对多关联(单向)
其实一对多就是多对一的相反,所以这里我们还是使用上一篇中的实体类。
不过略有变化,是以一的一方为主控方。
Group.java
package org.jzkangta.hibernate.many2one1.entity;
// Generated 2010-8-27 14:37:02 by Hibernate Tools 3.2.1.GA
import java.util.HashSet;
import java.util.Set;
/**
 * Group generated by hbm2java
 */
public class Group  implements java.io.Serializable {
     private int int_;
     private String name;
     private Set<User> users = new HashSet<User>();

    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }
    public int getInt_() {
        return int_;
    }
    public void setInt_(int int_) {
        this.int_ = int_;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}


User.java
package org.jzkangta.hibernate.many2one1.entity;
// Generated 2010-8-27 14:33:39 by Hibernate Tools 3.2.1.GA
import java.util.Date;
/**
 * User generated by hbm2java
 */
public class User  implements java.io.Serializable {
     private Integer id;
     private String name;
    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
  
}


Group.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2010-8-27 14:37:02 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="org.jzkangta.hibernate.many2one1.entity.Group" table="group" catalog="ibatisdb">
        <id name="int_" type="int">
            <column name="int" />
            <generator class="assigned" />
        </id>
        <property name="name" type="string">
            <column name="name" length="20" />
        </property>
        <Set name="users">
            <key column="groupid_"/>
            <one-to-many class="org.jzkangta.hibernate.entity.User"/>
        </Set>
    </class>
</hibernate-mapping>



多对一关联映射:在多的一端添加一个外键指向一的一端,主控方是多的一端。
一对多关联映射:在多的一端添加一个外键指向一的一端,主控方是一的一端。
所以一对多和多对一关联映射的策略是一致的,只是站的角度不同。


下面来看看双向关联。
User实体需要改变:
package org.jzkangta.hibernate.many2one1.entity;
// Generated 2010-8-27 14:33:39 by Hibernate Tools 3.2.1.GA
import java.util.Date;
/**
 * User generated by hbm2java
 */
public class User  implements java.io.Serializable {
     private Integer id;
     private String name;
     private Group group;

    public Group getGroup() {
        return group;
    }

    public void setGroup(Group group) {
        this.group = group;
    }
    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
  
}



User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2010-8-27 14:33:42 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="org.jzkangta.hibernate.User" table="user" catalog="ibatisdb">
        <id name="id" type="java.lang.Integer">
            <column name="id_" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="name_" length="50" />
        </property>
        <many-to-one name="group" column="groupid_"/>
    </class>
</hibernate-mapping>


<many-to-one name="group" column="groupid_" inverse="true"/>
这里的groupid必须和group.hbm.xml中的  <key column="groupid_"/>
一样。
这样,就完成双向关联。


注意:这种类型的关联,必须由多的一方来维护关系(User),不然会影响性能。(发出过多的update语句)
在group.hbm.xml中:
<Set name="users" inverse="true">
       <key column="groupid_"/>
       <one-to-many class="org.jzkangta.hibernate.entity.User"/>
</Set>
加上红色的部分,就可以翻转维护端。交给多的一端。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics