一、首先是一對多,多對一關聯映射,表模型就用公司表和員工表,它們的結構是公司表兩個字段:公司編號(自增長),公司名稱;員工表三個字段:員工編號(自增長),員工姓名,所屬公司編號。
Company.java里面的代碼,省略了get和set方法
2
3 Company() {
4 }
5
6 private Integer companyId;
7 private String companyName;
8 private Set<User> user;
9
10 ...
11 }
User.java里面的代碼,省略get和set方法
2
3 User() {
4 }
5
6 private Integer UserId;
7 private String userName;
8 private Company company;
9
10 ...
11 }
相關的Hibernate配置文件,Company.hbm.xml
2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4 <hibernate-mapping package="cn.dy.bean">
5 <class name="Company" table="tb_company" catalog="learn">
6 <id name="companyId" type="integer">
7 <column name="companyId" />
8 <generator class="identity" />
9 </id>
10 <property name="companyName" type="string">
11 <column name="companyName" length="200" not-null="true">
12 <comment>公司名稱</comment>
13 </column>
14 </property>
15 <set name="user">
16 <key column="companyId" />
17 <one-to-many class="User" />
18 </set>
19 </class>
20 </hibernate-mapping>
User.hbm.xml代碼為:
2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4 <hibernate-mapping>
5 <class name="cn.dy.bean.User" table="tb_user" catalog="learn">
6 <id name="userId" type="integer">
7 <column name="userId" />
8 <generator class="identity" />
9 </id>
10 <property name="userName" type="string">
11 <column name="userName" length="16" not-null="true">
12 <comment>帳號</comment>
13 </column>
14 </property>
15
16 <!-- 多對一,多個員工對應一個公司,員工表內companyId字段,對應公司表的主鍵companyId -->
17 <many-to-one name="company" column="companyId" not-null="true" />
18 </class>
19 </hibernate-mapping>
對應這4段代碼,需要注意的是:
一對多配置
1.Company.java里面加入屬性Set<User>;
2.Company.hbm.xml文件里面加上set配置,詳細見上面代碼;
多對一配置
4.User.java里面不能出現屬性companyId;
二、一對一映射,員工表和身份證號碼表(編號字段,和員工表員工編號一致;身份證號碼字段)
2
3 User() {
4 }
5
6 private Integer userId;
7 private String userName;
8 private IdCard idCard;
9
10 ...
11 }
IdCard.java代碼:
2
3 IdCard() {
4 }
5
6 private Integer id;
7 private String cardNum;
8 private User user;
9
10 ...
11 }
User.hbm.xml代碼
2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4 <hibernate-mapping>
5 <class name="cn.dy.bean.User" table="tb_user" catalog="learn">
6 <id name="userId" type="integer">
7 <column name="userId" />
8 <generator class="identity" />
9 </id>
10 <property name="userName" type="string">
11 <column name="userName" length="16" not-null="true">
12 <comment>帳號</comment>
13 </column>
14 </property>
15 <one-to-one name="idCard" />
16 </class>
17 </hibernate-mapping>
IdCard.hbm.xml代碼
2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4 <hibernate-mapping>
5 <class name="cn.dy.bean.IdCard" table="tb_idCard" catalog="learn">
6 <id name="id">
7 <generator class="foreign">
8 <param name="property">user</param>
9 </generator>
10 </id>
11 <property name="cardNum" type="string">
12 <column name="cardName" length="18" not-null="true">
13 <comment>身份證號碼</comment>
14 </column>
15 </property>
16 <one-to-one name="user" />
17 </class>
18 </hibernate-mapping>
三、摘編的其他網站信息:(技術是讓使用的,而不是一種桎梏,所以要靈活利用,不能說我使用Hibernate就必須用映射,有時候還要考慮效率問題,具體自己把握吧)
Hibernate 一對一"連接表"雙向關聯
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<join table="join" optional="true">
<key column="personId" unique="true"/>
<many-to-one name="address" column="addressId" not-null="true" unique="true"/>
</join>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="identity"/>
</id>
<property name="addressDetail"/>
<join table="join" optional="true" inverse="true">
<key column="addressId" unique="true"/>
<many-to-one name="person" column="personId" not-null="true" unique="true"/>
</join>
</class>
</hibernate-mapping>
Hibernate 一對一"主鍵"雙向關聯
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<one-to-one name="address" cascade="all"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="addressDetail"/>
<!--表明主鍵由關聯屬性生成-->
<one-to-one name="person" cascade="all" constrained="true"/>
</class>
</hibernate-mapping>
Hibernate 一對一"外鍵"雙向關聯
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<one-to-one name="address" cascade="all" property-ref="person"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="identity"/>
</id>
<property name="addressDetail"/>
<many-to-one name="person" unique="true"/>
</class>
</hibernate-mapping>
Hibernate 多對多單向關聯
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<!--映射集合屬性,join是連接表表名-->
<set name="addresses" table="join" >
<key column="personId"/>
<many-to-many column="addressId" class="cn.dy.Address"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="identity"/>
</id>
<property name="addressDetail"/>
</class>
</hibernate-mapping>
Hibernate 多對一"連接表"單向關聯
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<join table="join">
<key column="personId"/>
<many-to-one name="address"/>
</join>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="identity"/>
</id>
<property name="addressDetail"/>
</class>
</hibernate-mapping>
Hibernate 多對一外鍵單向關聯
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<many-to-one name="address" column="addressId"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="identity"/>
</id>
<property name="addressDetail"/>
</class>
</hibernate-mapping>
Hibernate 一對多連接表單向關聯
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<set name="addresses" table="join" >
<key column="personId"/>
<many-to-many column="addressId" unique="true" class="cn.dy.Address"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="identity"/>
</id>
<property name="addressDetail"/>
</class>
</hibernate-mapping>
Hibernate 一對一主鍵單向關聯
<id name="personId">
<generator class="foreign">
<param name="property">address</param>
</generator>
</id>
<one-to-one name="address" constrained="true"/>
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId" column="presonid">
<generator class="foreign">
<param name="property">address</param>
</generator>
</id>
<property name="name"/>
<property name="age"/>
<one-to-one name="address" constrained="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="identity"/>
</id>
<property name="addressDetail"/>
</class>
</hibernate-mapping>
Hibernate 一對一外鍵單向關聯
<many-to-one name="address" column="addressId" unique="true"/>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressId">
<generator class="identity"/>
</id>
<property name="addressDetail"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personId">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<many-to-one name="address" column="addressId" unique="true"/>
</class>
</hibernate-mapping>
Hibernate 一對多外鍵單向關聯
<set name="addresses" table="ADDRESS" cascade="all" >
<key column="personid"/>
<one-to-many class="cn.dy..Address"/>
</set>
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<set name="addresses" table="ADDRESS" cascade="all" >
<key column="personid"/>
<one-to-many class="cn.dy..Address"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressid">
<generator class="identity"/>
</id>
<property name="addressdetail"/>
</class>
</hibernate-mapping>
Hibernate 一對一連接表單向關聯
<join table="join">
<key column="personid"/>
<many-to-one name="address" unique="true"/>
</join>
<hibernate-mapping>
<class name="cn.dy.Person" table="PERSON">
<id name="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<join table="join">
<key column="personid"/>
<many-to-one name="address" unique="true"/>
</join>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.dy.Address" table="ADDRESS">
<id name="addressid">
<generator class="identity"/>
</id>
<property name="addressdetail"/>
</class>
</hibernate-mapping>
簽名:有能力、有擔當、有情義的人才能稱之為男人,而不是由性別決定。