如果你採用的是如下的主鍵關聯方式,
可看到人和車的一對一關聯設定,
並且採用的是同一主鍵關聯對應,
Person.java
package com.model;
public class Person {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Car.java
package com.model;
public class Car {
private String userId;
private String licenseNum;
private Person person;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getLicenseNum() {
return licenseNum;
}
public void setLicenseNum(String licenseNum) {
this.licenseNum = licenseNum;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
Person.hbm.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.model.Person" table="person"> <id name="id" type="java.lang.String"> <generator class="assigned" /> </id> <property name="name" type="string"> <column name="name" length="10" not-null="true" /> </property> </class> </hibernate-mapping>
Car.hbm.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.model.Car" table="car">
<id name="userId" column="userId">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="licenseNum" type="string">
<column name="licenseNum" length="10" not-null="true" />
</property>
<one-to-one name="person" constrained="true"/>
</class>
</hibernate-mapping>
在Car.hbm.xml中 的id映射,
需設定為外鍵關聯且參數名稱為person,
並且在一對一配置上將constrained設定為true,
表示限制為一對一關聯。
接下來我們撰寫測試程式如下:
TestPersonCar.java
package com.hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hibernate.util.HibernateUtils;
import com.model.Car;
import com.model.Person;
public class TestPersonCar {
public static void main(String[] args) {
Session session = HibernateUtils.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
try {
Person person = new Person();
person.setId("W123456789");
person.setName("Jeff");
Car car = new Car();
car.setLicenseNum("WTR-928");
car.setPerson(person);
session.save(car);
session.save(person);
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
session.close();
HibernateUtils.shutdown();
}
}
}
此為執行完成時的console畫面,
Hibernate: insert into car (licenseNum, userId) values (?, ?)
Hibernate: insert into person (name, id) values (?, ?)
table person
table car



沒有留言:
張貼留言