作為關聯關係有多對一,有一對多。然後有一對一的關聯。一對一可以主鍵之間的一對一也可以通過外鍵的一對一。
1對1的關係也是比較常見的一種關聯。
看下面這個兩個表
人表和身份證表。
一個人只有一張身份證,一個人只有一個id號。一個id號也只能對應一個人。人和是主表,身份證表示從屬表。
下面寫一個執行個體。對身份證表和人表的插入資料和查詢。
1person類
package com.fish.testdao;
public
class Person {
private
int id;
private String
name;
private IdCard
idCard;
public
int getId() {
return
id;
}
public
void setId(int id) {
this.id = id;
}
public String getName() {
return
name;
}
public
void setName(String name) {
this.name = name;
}
public IdCard getIdCard() {
return
idCard;
}
public
void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
}
2.idcard類
package com.fish.testdao;
import java.sql.Date;
public
class IdCard {
private
int id;
private Date
useDate;
private Person
person;
public
int getId() {
return
id;
}
public
void setId(int id) {
this.id = id;
}
public Date getUseDate() {
return
useDate;
}
public
void setUseDate(Date useDate) {
this.useDate = useDate;
}
public Person getPerson() {
return
person;
}
public
void setPerson(Person person) {
this.person = person;
}
}
3.人xml
<?xml
version="1.0"
encoding="UTF-8"?>
<!DOCTYPE
hibernate-mapping PUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class
name="com.fish.testdao.Person">
<id
name="id"
type="integer">
</id>
<property
name="name"></property>
<one-to-one
name="idCard"></one-to-one>//在1對1你關係中idcard不會作為人表中的欄位。
</class>
</hibernate-mapping>
4.idcard xml
<?xml
version="1.0"
encoding="UTF-8"?>
<!DOCTYPE
hibernate-mapping PUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class
name="com.fish.testdao.IdCard">
<id
name="id"
type="integer">
<generator
class="foreign">/用這個屬性說明,該表的id欄位會從person類中的id中匹配過來,如何匹配的,就是通過下面property的值為person,因為你的one-to-one
是person
<param
name="property">person</param>
</generator>
</id>
<property
name="useDate"></property>
<one-to-one
name="person"></one-to-one>
</class>
</hibernate-mapping>
下面寫一個測試類別:
package com.fish.domain;
import java.sql.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.fish.testdao.IdCard;
import com.fish.testdao.Person;
public
class Test3 {
//做一個session模板
public
static Session getMySession() {
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
SessionFactory factory = configuration.buildSessionFactory();
Session session = factory.openSession();
return session;
}
//對兩個表的添加
public
static void add() {
Session session = getMySession();
Transaction transaction = session.beginTransaction();
IdCard idCard = new IdCard();
idCard.setUseDate(new Date(0));
Person person = new Person();
idCard.setPerson(person);
person.setName("fish");
person.setIdCard(idCard);
person.setId(8);
transaction.begin();
session.save(person);
session.save(idCard);
transaction.commit();
session.close();
}
//對兩個表的查詢
public
static void query() {
String hql = "fromPerson";
Session session = getMySession();
Query query = session.createQuery(hql);
List<Person> list= query.list();
for (Person i : list) {
System.out.println(i.getName() +
"卡的日期為"
+ i.getIdCard().getUseDate());
}
session.close();
}
//主方法。
public
static void main(String[] args) {
query();
}
}