Hibenate mat-to-oneマッピング、最も簡単な例
元のアドレス、http://blog.csdn.net/love_0808/articale/detail/3758344
使ったので、他の人が読むように整理しました。
1.データベーステーブルの作成
usersによると、人がroomで部屋を共有しています。
2.実体類Users.java
3.実体類Room.java
4.マッピングファイル
User.hbm.xml
5.マッピングファイル
Room.hbm.xml
「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=ですか
使ったので、他の人が読むように整理しました。
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=ですか