唯一外键方式
在上一篇博客已经说了,下面我们直接看例子。
创建Person表,Room表
Person表
Room表
创建Java项目Hibernate_mapping1-n
Person.java
package org.vo;
public class Person implements java.io.Serializable {
// Fields
private Integer id;
private String name;
//private Integer roomId;//将外键注释掉
private Room room;
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
public Person() {
}
public Person(String name, Room room) {
this.name = name;
//this.roomId = roomId;
this.room=room;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Room.java
package org.vo;
public class Room implements java.io.Serializable {
private Integer id;
private String address;
private Person person;//增加person属性
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public Room() {
}
public Room(String address,Person person) {
this.address = address;
this.person=person;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
}
Rerson.hbm.xml:一个房间可以住多个人,
要记得将roomId那一行删除,不然会出现一个实体被多次映射
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.vo.Person" table="Person" schema="dbo" catalog="Test">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="50" />
</property>
<many-to-one name="room" column="room_id" class="org.vo.Room" cascade="all" unique="true">
</many-to-one>
</class>
</hibernate-mapping>
Room.hbm.xml:一个人只能住一个房间
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.vo.Room" table="Room" schema="dbo" catalog="Test">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="address" type="java.lang.String">
<column name="address" length="50" />
</property>
<one-to-one name="person" class="org.vo.Person" property-ref="room"></one-to-one>
</class>
</hibernate-mapping>
Test.java
package org.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.util.HibernateSessionFactory;
import org.vo.Person;
import org.vo.Room;
public class Test {
Session session=HibernateSessionFactory.getSession();
public static void main(String[] args){
Test test=new Test();
test.save();
}
public void save(){
Transaction ts=session.beginTransaction();
Person person=new Person();
person.setName("pengtao");
Room room=new Room();
room.setAddress("changsha");
person.setRoom(room);
session.save(person);
ts.commit();
}
}