主键关联
一对一的主键关联就是两张关联的表通过主键形成一对一的映射关系。下面以用户和订单的关系进行说明。
用户类。
用户表(user):
映射文件
User.hbm.xml
订单类:
订单表(ordertable):
映射文件:Order.hbm.xml
测试用例:
执行后在数据库中分别会有
user表 id name password
2 hello nihao
ordertable表 id total
2 12
可以见到ordertable的id与对应user表中的id都是一样的(2)即主键关联这时就可以通过查询user得到对应的order.
用户类。
java 代码
- package com.tyq;
- public class User
- private int id;
- private String name;
- private String password;
- private Order order;
java 代码
- id int primary key auto_increment
- name String not null
- password String not null
User.hbm.xml
xml 代码
- <?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.tyq.User" table="user"
- dynamic-update="true" dynamic-insert="true">
- <id name="id" column="id">
- <generator class="native" />
- </id>
- <property name="name" column="name" type="string"
- not-null="true" />
- <property name="password" column="password" type="string"
- not-null="true" />
- <one-to-one name="order" class="com.tyq.Order"
- cascade="all" outer-join="auto" constrained="false" />
- </class>
- </hibernate-mapping>
订单类:
java 代码
- package com.tyq
- public class Order
- private User user;
- private double total;
- private int id;
java 代码
- id int primary key auto_increment
- total double
java 代码
- <?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.tyq.Order" table="ordertable">
- <id name="id" column="id">
- <generator class="foreign">
- <param name="property">user</param>
- </generator>
- </id>
- <one-to-one name="user" class="com.tyq.User" constrained="true"/>
- <property name="total" column="total" type="double"/>
- </class>
- </hibernate-mapping>
java 代码
- User user = new User();
- user.setName("hello");
- user.setPassword("nihao");
- Order order = new Order();
- order.setTotal(12);
- order.setUser(user);
- user.setOrder(order);
- session.save(user);
- tx.commit();
user表 id name password
2 hello nihao
ordertable表 id total
2 12
可以见到ordertable的id与对应user表中的id都是一样的(2)即主键关联这时就可以通过查询user得到对应的order.