// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 Hibernateのマッピング定義についていろいろ調べてみました。例を使ってまとめておきます。 #contents **例となるモデル [#je443635] あるサービスの顧客(Customer)とその担当者(User)というモデルを例にして考えてみます。担当者は複数の顧客を担当しています。逆に顧客にはひとり、担当者がついています。ついていない場合もあるとしましょう。 ***E-R図 [#qa83948d] #ref(er.png) CustomerはUserへの外部キーをもつことで担当者を表現しています。また担当がまだついていない場合もあるということでこの外部キーカラムはnullをOKとしています。 *** テーブル定義 [#n3de2d09] -describe USER; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | ID | int(10) unsigned | NO | PRI | NULL | auto_increment | | NAME | varchar(45) | YES | | NULL | | +-------+------------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) -describe CUSTOMER; +---------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+------------------+------+-----+---------+----------------+ | ID | int(10) unsigned | NO | PRI | NULL | auto_increment | | NAME | varchar(45) | YES | | NULL | | | USER_ID | int(10) unsigned | YES | MUL | 0 | | +---------+------------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) -show create table USER; CREATE TABLE `USER` ( `ID` int(10) unsigned NOT NULL auto_increment, `NAME` varchar(45) character set ujis default '', PRIMARY KEY (`ID`) ) -show create table CUSTOMER; CREATE TABLE `CUSTOMER` ( `ID` int(10) unsigned NOT NULL auto_increment, `NAME` varchar(45) character set ujis default '', `USER_ID` int(10) unsigned default '0', PRIMARY KEY (`ID`), KEY `FK52C76FDE65079CAA` (`USER_ID`), CONSTRAINT `FK52C76FDE65079CAA` FOREIGN KEY (`USER_ID`) REFERENCES `USER` (`ID`) ) ***JavaBeansとhbm.xmlファイル [#j4e88693] -User.java public class User implements java.io.Serializable { // Fields private int id; private String name; private Set customers = new HashSet(0); public String toString() { return new ToStringBuilder(this).append("id", getId()).append("name", getName()).toString(); } getter/setterは省略 } -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 2006/11/12 9:58:17 by Hibernate Tools 3.2.0.beta6a --> <hibernate-mapping> <class name="nu.mine.kino.entity.User" table="USER" catalog="Samples"> <comment></comment> <id name="id" type="int"> <column name="ID" /> <generator class="increment" /> </id> <property name="name" type="string"> <column name="NAME" length="45"> <comment></comment> </column> </property> <set name="customers" inverse="true"> <key> <column name="USER_ID"> <comment></comment> </column> </key> <one-to-many class="nu.mine.kino.entity.Customer" /> </set> </class> </hibernate-mapping> -Customer.java public class Customer implements java.io.Serializable { // Fields private int id; private User user; private String name; public String toString() { return new ToStringBuilder(this).append("id", getId()).append("name", getName()).append("担当者", getUser()).toString(); } getter/setterは省略 } -Customer.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 2006/11/12 9:58:17 by Hibernate Tools 3.2.0.beta6a --> <hibernate-mapping> <class name="nu.mine.kino.entity.Customer" table="CUSTOMER" catalog="Samples"> <comment></comment> <id name="id" type="int"> <column name="ID" /> <generator class="increment" /> </id> <many-to-one name="user" class="nu.mine.kino.entity.User" fetch="select" > <column name="USER_ID"> <comment></comment> </column> </many-to-one> <property name="name" type="string"> <column name="NAME" length="45"> <comment></comment> </column> </property> </class> </hibernate-mapping> *** hibernate.cfg.xml [#q6603fdc] <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="hibernate.connection.username">xxxx</property> <property name="hibernate.connection.password">xxxx</property> <property name="hibernate.connection.url">jdbc:mysql://xxxx/Samples?useUnicode=true &characterEncoding=ujis</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <mapping resource="nu/mine/kino/entity/User.hbm.xml" /> <mapping resource="nu/mine/kino/entity/Customer.hbm.xml" /> </session-factory> </hibernate-configuration> **いろいろテスト [#mf512739] #ls2 **関連リンク [#x36e27cb] -[[第11章 HQL: Hibernateクエリ言語>http://www.hibernate.org/hib_docs/reference/ja/html/queryhql.html]] ---- この記事は #vote(おもしろかった[5],そうでもない[3]) #vote(おもしろかった[6],そうでもない[3]) #comment #topicpath SIZE(10){現在のアクセス:&counter;}