1対のマルチワイヤリングマッピング(一方向ワイヤリング)は、プロジェクト:me_を参照してください.one_to_many
1.モデル1つのユーザグループ(group)が複数のユーザに対応する.2.エンティティクラス(set,getメソッドを省略)
3.データモデルmysql>desc_user;+---------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(255) | YES | | NULL | || groupid | int(11) | YES | MUL | NULL | |+---------+--------------+------+-----+---------+----------------+mysql> desc t_group;+-------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(255) | YES | | NULL | |+-------+--------------+------+-----+---------+----------------+4.ファイルをマッピングする1つのユーザー・グループは、複数のユーザーに対応します.マルチ対1の関連マッピング:マルチの一端に外部キーを追加して1の一端を指し、ユーザー(user)をロードするとグループ(group)の情報がロードされるなど、複数の関係を維持します.1対のマルチ関連マッピング:マルチの一端に外部キーを追加して1の一端を指し、グループ(group)をロードすると、このグループのユーザーの情報がロードされます.一対多と多対一のマッピングポリシーは一致しており、いずれも「多」の一端に外部キーを追加することによって「一」の一端を指し、ただ局の角度が異なると言える.User.hbm.xml:
Group.hbm.xml:
5.テスト
public class User {
private int id;
private String name;
}
public class Group {
private int id;
private String name;
private Set Users;
}
3.データモデルmysql>desc_user;+---------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(255) | YES | | NULL | || groupid | int(11) | YES | MUL | NULL | |+---------+--------------+------+-----+---------+----------------+mysql> desc t_group;+-------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(255) | YES | | NULL | |+-------+--------------+------+-----+---------+----------------+4.ファイルをマッピングする1つのユーザー・グループは、複数のユーザーに対応します.マルチ対1の関連マッピング:マルチの一端に外部キーを追加して1の一端を指し、ユーザー(user)をロードするとグループ(group)の情報がロードされるなど、複数の関係を維持します.1対のマルチ関連マッピング:マルチの一端に外部キーを追加して1の一端を指し、グループ(group)をロードすると、このグループのユーザーの情報がロードされます.一対多と多対一のマッピングポリシーは一致しており、いずれも「多」の一端に外部キーを追加することによって「一」の一端を指し、ただ局の角度が異なると言える.User.hbm.xml:
<hibernate-mapping>
<class name="com.dvnchina.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
Group.hbm.xml:
<hibernate-mapping>
<class name="com.dvnchina.hibernate.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- <set name="users" cascade="all">-->
<set name="users" order-by="name">
<key column="groupid"/>
<one-to-many class="com.dvnchina.hibernate.User"/>
</set>
</class>
</hibernate-mapping>
5.テスト
public class TestOneToMany extends TestCase {
public void testSave(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Set<User> users = new HashSet<User>();
for(int i=0;i<9;i++){
User user = new User();
user.setName("yang"+i);
//session.save(user);
users.add(user);
}
// user save, Transient , TransientObjectException
// , save(user)
//
Group group = new Group();
group.setName(" ");
group.setUsers(users);
session.save(group);
tx.commit();
HibernateUtils.closeSession(session);
}
public void testCascade(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Set<User> users = new HashSet<User>();
for(int i=0;i<9;i++){
User user = new User();
user.setName("yang"+i);
users.add(user);
}
// user.hbm.xml one-to-many cascade="all", user
// , save(group) user
Group group = new Group();
group.setName(" ");
group.setUsers(users);
session.save(group);
tx.commit();
HibernateUtils.closeSession(session);
}
// ( , load ,load one-to-many )
public void testLoad(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Group group = (Group) session.load(Group.class, 2);
Set list = group.getUsers();
for(Iterator ite = list.iterator();ite.hasNext();){
User user = (User) ite.next();
System.out.println(group.getName()+","+user.getName());
}
tx.commit();
HibernateUtils.closeSession(session);
}
}