- - PR -
HibernateのSetコレクションの中身が1つしか返ってこない。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-04-11 11:22
使用環境:
Hibernate-2.1 PostgreSQL8.1.8 WindowsXP empテーブル id:1 name:倉田 あさみ furigana:くらた あさみ sex:女 ... などのデータが入っています。 また、itemテーブルには item_id | user_id | item_name ---------+---------+---------------------- 1 | 1 | Hibernate in Action 2 | 2 | SQL Reference 3 | 1 | Ajax in Action 4 | 1 | Design Pattern 5 | 3 | Linux コマンドブック 6 | 1 | 天然水 南アルプス 7 | 1 | santeFX NEO などのアイテムが入っています。 次に、EmpEntity.hbm.xmlファイルの構成です。 <?xml version="1.0" ?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping package="entity"> <class name="EmpEntity" table="EMP"> <id name="id" column="id" type="int" > <generator class="assigned" /> </id> <property name="name" type="string" column="name" /> <property name="furigana" type="string" column="furigana" /> <property name="sex" type="string" column="sex" /> <property name="age" type="int" column="age" /> <property name="blood" type="string" column="blood" /> <property name="ken" type="string" column="ken" /> <property name="phone" type="string" column="phone" /> <property name="mobile" type="string" column="mobile" /> <set name="items" table="ITEM" inverse="true" cascade="all-delete-orphan"> <key column="ITEM_ID"></key> <one-to-many class="ItemEntity"/> </set> </class> <query name="findEmpById"><![CDATA[ from EmpEntity e where e.id = :id ]]></query> </hibernate-mapping> ItemEntity.hbm.xmlの構成です。 <?xml version="1.0" ?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping package="entity"> <class name="ItemEntity" table="ITEM"> <id name="id" column="item_id" type="int" > <generator class="increment" /> </id> <many-to-one name="user" column="user_id" class="EmpEntity" cascade="save-update"> </many-to-one> <property name="name" type="string" column="item_name" /> </class> </hibernate-mapping> 以上の構成の時、 EmpEntity eを1つ取得し、eが持っているitemsを表示させたいのですが、なぜかitemsの中身が1つになってしまいます。 コードは以下です。 EmpEntity e = (EmpEntity) session.getNamedQuery("findEmpById") .setParameter("id", 1) .uniqueResult(); System.out.println(e.getItems().size()); for (Iterator<ItemEntity> it = e.getItems().iterator(); it.hasNext();) { ItemEntity item = it.next(); System.out.println("アイテム名:" + item.getName() + "(所有者:" + item.getUser().getName() + ")"); } _________________ |
|
投稿日時: 2007-04-11 11:30
すみません。自己解決しました。
EntityEmp.hbm.xmlの <set name="items" table="ITEM" inverse="true" cascade="all-delete-orphan"> <key column="ITEM_ID"></key> <one-to-many class="ItemEntity"/> </set> </class> <query name="findEmpById"><![CDATA[ from EmpEntity e where e.id = :id ]]></query> </hibernate-mapping> の<key>のcolumnをUSER_IDにしないといけませんでした。 意味の無い質問で申し訳ありません。 _________________ |
1