CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(111) NOT NULL default '',
`room_id` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `room` (
`id` int(11) NOT NULL auto_increment,
`address` varchar(111) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGIN
package com.user.oneToone;
import java.util.Set;
public class Room {
private int id;
private String address;
public Room(){}
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
package com.user.oneToone;
import java.util.List;
public class User {
private int id;
private String name;
private Room room;
public User(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
}
<?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="show_sql">true</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.driver_class">
org.gjt.mm.mysql.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/Sample
</property>
<property name="connection.username">
root
</property>
<property name="connection.password">
root
</property>
<!-- 一对多
<mapping resource="com/user/oneTomany/User.hbm.xml" />
<mapping resource="com/user/oneTomany/Room.hbm.xml" />
-->
<!-- 一对一 -->
<mapping resource="com/user/oneToone/User.hbm.xml" />
<mapping resource="com/user/oneToone/Room.hbm.xml" />
</session-factory>
</hibernate-configuration>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.user.oneToone.Room" table="room">
<id column="id" name="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property column="address" name="address" type="string"/>
<!-- property-ref告诉hibernate查询出user并将其参考至room -->
<one-to-one name="user" class="com.user.oneToone.User" property-ref="room"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.user.oneToone.User" table="user">
<id column="id" name="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property column="name" name="name" type="string" />
<!-- 一对一是多对一的特例,只需要在多的一方加上 unique="true" -->
<many-to-one name="room" class="com.user.oneToone.Room" column="room_id"
cascade="save-update" outer-join="true" unique="true"/>
</class>
</hibernate-mapping>
测试代码:
package com.user.test;
import junit.framework.TestCase;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import com.user.oneToone.Room;
import com.user.oneToone.User;
import com.util.HibernateUtil;
public class oneToone extends TestCase{
//自动创建数据库
public void testCreate()
{
Configuration conf=new Configuration().configure("com/user/oneToone/hibernate.cfg.xml");
SchemaExport export=new SchemaExport(conf);
export.create(true, true);
}
//添加数据
public void testSave()
{
Configuration conf=new Configuration().configure("com/user/oneToone/hibernate.cfg.xml");
SessionFactory factory=conf.buildSessionFactory();
Session session =factory.openSession();
Transaction tx=session.beginTransaction();
User user1=new User();
user1.setName("user1");
Room room1=new Room();
room1.setAddress("room1");
user1.setRoom(room1);
User user2=new User();
user2.setName("user2");
Room room2=new Room();
room2.setAddress("room2");
user2.setRoom(room2);
session.save(user1);
session.save(user2);
tx.commit();
session.close();
}
}