hibernate基于外键的双向一对一

配置hibernate环境、

实体类

public class People {
	private Integer id;
	private String name;
	private IdCard idCard;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public IdCard getIdCard() {
		return idCard;
	}
	public void setIdCard(IdCard idCard) {
		this.idCard = idCard;
	}
	
	public People(String name) {
		super();
		this.name = name;
	}
	public People(String name, IdCard idCard) {
		super();
		this.name = name;
		this.idCard = idCard;
	}
	public People() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "People [id=" + id + ", name=" + name + "]";
	}
	
}
public class IdCard {
	private Integer id;
	private String address;
	private People people;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public People getPeople() {
		return people;
	}
	
	public IdCard(String address) {
		super();
		this.address = address;
	}
	public void setPeople(People people) {
		this.people = people;
	}
	public IdCard(String address, People people) {
		super();
		this.address = address;
		this.people = people;
	}
	public IdCard() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "IdCard [id=" + id + ", address=" + address + "]";
	}
	
}

映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
		<class name="com.wd.pojo.People" table="t_people">
			<id name="id" column="id">
				<generator class="identity"></generator>
			</id>
			<property name="name" column="name" length="50"></property>
			<!-- 通过控制多的一方唯一,实现一对一 -->
			<many-to-one name="idCard" column="cardId"></many-to-one>
		</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
	<class name="com.wd.pojo.IdCard" table="t_idcard">
		<id name="id" column="id">
			<generator class="identity"></generator>
		</id>
		<property name="address" column="address" length="50" ></property>
		<one-to-one name="people" property-ref="idCard"></one-to-one>
	</class>
</hibernate-mapping>

测试代码

public class HibernateTest {
	@Test
	public void testCreateDB(){
		Configuration cfg = new Configuration().configure();
		SchemaExport se = new SchemaExport(cfg);
		//第一个参数 是否打印脚本,第二个参数是否导入数据库
		se.create(true, true);
	}
	@Test
	public void testInit() {
		Session session = null;
		try {
			//准备数据
			IdCard idCard1 = new IdCard("重庆");
			IdCard idCard2 = new IdCard("北京");
			IdCard idCard3 = new IdCard("上海");

			People people1 = new People("Steven");
			People people2 = new People("Russell");
			People people3 = new People("qwer");
			
			idCard1.setPeople(people1);
			idCard2.setPeople(people2);
			idCard3.setPeople(people3);
			people1.setIdCard(idCard1);
			people2.setIdCard(idCard2);
			people3.setIdCard(idCard3);
			//开启session
			session = HibernateUtil.getSession();
			session.beginTransaction();
			session.save(idCard1);
			session.save(idCard2);
			session.save(idCard3);
			session.save(people1);
			session.save(people2);
			session.save(people3);
			
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}
	@Test
	public void testGet() {
		Session session = null;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			
			People people = (People) session.get(People.class, 1);
			System.out.println(people.getIdCard());
			System.out.println("-----------------------");
			IdCard idCard = (IdCard) session.get(IdCard.class, 2);
			System.out.println(idCard.getPeople());
			
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}
}

 

posted @ 2019-11-15 22:33  Steven-Russell  阅读(2)  评论(0编辑  收藏  举报  来源