一对一单向
定义两个类,两个映射文件一个工具类生成表
public class Group { private int id; private String name; //这里省略setter,getter方法 }
public class User{ private int id; private String name; private Group group; //这里省略setter,getter方法 }
<class name="many2one.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!-- 无连接表 --> <many-to-one name="group" column="groupid" unique="true" not-null="true"/> <!-- 有连接表 <join table="User_Group" optional="true"> <key column="userid" unique="true"/> <many-to-one name="group" class="many2one.Group" column="groupid" unique="true" not-null="true" /> </join> --> </class>
<class name="many2one.Group" table="t_group"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class>
public static void main(String[] args) { //读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); SchemaExport export = new SchemaExport(cfg); export.create(true, true); }
一对一双向
在原来的基础上,添加如下的两个配置
private User user;
<!-- 一对多双向 --> <one-to-one name="user" property-ref="group" />
基于主键的一对一
两个实体类,两个映射文件
public class Person { private int id; private Address address; //setter,getter }
public class Address { private int id; private Person person; //setter,getter方法 }
<class name="Person" table="Person"> <id name="id" column="personId"> <generator class="native" /> </id> <one-to-one name="address" /> </class>
<class name="Address" table="Address"> <id name="id" column="personId"> <generator class="foreign"> <param name="property">person</param> </generator> </id> <one-to-one name="person" constrained="true" /> </class>