主键关联-双向
User的主键自动生成
Person的主键来源于User的主键
此处 <one-to-one>中的constrained="true" 意味着Person有一个fk指向User
如果只需要单向,则将User.hbm.xml中的<one-to-one>标签去掉
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.lohamce.hibernate">
<class name="User" table="t_user">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<property name="password" />
<property name="createTime" />
<property name="expireTime" />
<many-to-one name="group" column="groupId" />
<!-- cascade:默认为none all:增删改都会级联处理 但是不建议如此处理,应该按照业务逻辑来进行操作,而不是通过配置来处理 -->
<one-to-one name="person" property-ref="user" />
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.lohamce.hibernate">
<class name="Person" table="t_person">
<id name="id">
<generator class="native" />
</id>
<property name="firstName" />
<property name="lastName" />
<many-to-one name="user" unique="true" column="userId" />
</class>
</hibernate-mapping>
唯一外键关联-单向
实质上是Many2One的特殊情况
Person.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lohamce.hibernate"> <class name="Person" table="t_person" > <id name="id"> <generator class="native" /> </id> <property name="firstName" /> <property name="lastName" /> <many-to-one name="user" unique="true" column="userId"/> </class> </hibernate-mapping>
唯一外键关联-双向
需要配置property-ref属性<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lohamce.hibernate"> <class name="User" table="t_user" > <id name="id"> <generator class="native" /> </id> <property name="name" /> <property name="password" /> <property name="createTime" /> <property name="expireTime" /> <many-to-one name="group" column="groupId" /> <!-- cascade:默认为none all:增删改都会级联处理 但是不建议如此处理,应该按照业务逻辑来进行操作,而不是通过配置来处理 --> <one-to-one name="person" property-ref="user"/> </class> </hibernate-mapping>