如果你採用的是如下的主鍵關聯方式,
可看到人和車的一對一關聯設定,
並且採用的是同一主鍵關聯對應,
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
沒有留言:
張貼留言