Hibenate mat-to-oneマッピング、最も簡単な例


元のアドレス、http://blog.csdn.net/love_0808/articale/detail/3758344
使ったので、他の人が読むように整理しました。
 
1.データベーステーブルの作成
create table room (
   id bigint not null  IDENTITY(1,1),
   address varchar(255),
   primary key (id)
)
create table users (
   id bigint not null  IDENTITY(1,1),
   name varchar(255),
   room_id bigint,
   primary key (id)
)
 
 usersによると、人がroomで部屋を共有しています。
 
2.実体類Users.java
package com.crazyjava.vo;

public class Users implements java.io.Serializable {

	private static final long serialVersionUID = -1481433969291380841L;

	private Long id;
	private String name;
	private Room room;

	public Users() {
	}

	public Users(String name, Room room) {
		this.name = name;
		this.room = room;
	}

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Room getRoom() {
		return room;
	}

	public void setRoom(Room room) {
		this.room = room;
	}
}
 
3.実体類Room.java
package com.crazyjava.vo;

public class Room implements java.io.Serializable {
	private static final long serialVersionUID = 6788763073536851614L;
	private Long id;
	private String address;

	public Room() {
	}

	public Room(String address) {
		this.address = address;
	}

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
}
 
4.マッピングファイル
 
User.hbm.xml
 
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.crazyjava.vo.Users" table="users" schema="dbo" catalog="bbs">
        <id name="id" type="java.lang.Long">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" />
        </property>
        <many-to-one name="room"
                     column="room_id"
                     class="com.crazyjava.vo.Room"
                     cascade="all"
                     outer-join="true"/>
    </class>
</hibernate-mapping>
 
5.マッピングファイル
Room.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.crazyjava.vo.Room" table="room" schema="dbo" catalog="bbs">
        <id name="id" type="java.lang.Long">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="address" type="java.lang.String">
            <column name="address" />
        </property>
    </class>
</hibernate-mapping>
 
「many-to-one」では、cascadeがメインコントローラーを示してsave-udate、deleteなどを操作する場合、被告訴者(Room)も一緒に関連操作を行うかどうか。allに設定して、主操作者の任意の操作を表します。被操作者も操作します。
照会時に、outer-jinをtrueと設定した場合、hibernateは以下のsqlを使用します。
ハイベルナ:    プロジェクト        アメリカ.id as id 0_1_、        アメリカ.name as name 0_1_、        アメリカ.room_id as room 3_0_1_、        room 1_.id as id 1_0_、        room 1_.address as address 1_0_     from        user user 0_     left outer jun        room room 1_             on user 0_.room_id=room 1_.id。     where        アメリカ.id=ですか
falseとしてsqlを実行する
ハイベルナ:     プロジェクト        アメリカ.id as id 0_0_、        アメリカ.name as name 0_0_、        アメリカ.room_id as room 3_0_0_     from        user user 0_     where        アメリカ.id=ですか
ハイベルナ:     プロジェクト        ロム0_.id as id 1_0_、        ロム0_.address as address 1_0_     from        room room 0_     where        ロム0_.id=ですか