- 追加された行はこの色です。
- 削除された行はこの色です。
// 下階層用テンプレート
#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(おもしろかった[1],そうでもない[1])
#vote(おもしろかった[6],そうでもない[3])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}