一.主键关联
关系表
create table person(
p_id varchar(32) primary key,
p_name varchar(20)
);
create table card(
c_id varchar(32) primary key,
c_num varchar(30),
foreign key(c_id) references person(p_id)
);
xml文件
<class name="po.onetoone.Person" table="person" catalog="orm"> <id name="PId" type="java.lang.String"> <column name="p_id" length="32" /> <generator class="uuid.hex" /> </id> <property name="PName" type="java.lang.String"> <column name="p_name" length="20" /> </property> <one-to-one name="card" class="po.onetoone.Card" cascade="all" outer-join="false"> </one-to-one> </class> <class name="po.onetoone.Card" table="card" catalog="orm"> <id name="CId" type="java.lang.String"> <column name="c_id" length="32" /> <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="CNum" type="java.lang.String"> <column name="c_num" length="30" /> </property> <one-to-one name="person" class="po.onetoone.Person" constrained="true"> </one-to-one> </class>
DAO文件
package dao;
import org.hibernate.Query;
import org.hibernate.Session;
import po.onetoone.Card;
import po.onetoone.Person;
import config.HibernateSessionFactory;
/**
* 一对一关联-->主键关联
*
* @author Simon
*
*/
public class CardDAO {
public void insert(String pName, String cNum) {// 测试添加
Session session = null;
try {
session = HibernateSessionFactory.getSession();
Person person = new Person();
Card card = new Card();
person.setCard(card);
person.setPName(pName);
card.setPerson(person);
card.setCNum(cNum);
session.beginTransaction();
session.save(person);
session.beginTransaction().commit();
session.close();
} catch (Exception e) {
// TODO: handle exception
if (session != null) {
session.close();
}
}
}
public void delete(String pName) {// 测试删除
Session session = null;
try {
session = HibernateSessionFactory.getSession();
Query query = session.createQuery("from Person where PName=?");
query.setString(0, pName);
if (query.list().size() != 0) {
Person person = (Person) query.list().get(0);
session.beginTransaction();
session.delete(person);
session.beginTransaction().commit();
session.close();
} else {
System.out.println("Null");
}
} catch (Exception e) {
// TODO: handle exception
if (session != null) {
session.close();
}
}
}
public void select(String pName) {// 测试查寻
Session session = null;
try {
session = HibernateSessionFactory.getSession();
session.beginTransaction();
Query query = session.createQuery("from Person where PName=?");
query.setString(0, pName);
if (query.list().size() != 0) {
Person person = (Person) query.list().get(0);
System.out.println(person.getPName() + "的卡号为:"
+ person.getCard().getCNum());
} else {
System.out.println("null");
}
session.beginTransaction().commit();
session.close();
} catch (Exception e) {
// TODO: handle exception
if (session != null) {
session.close();
}
}
}
public void update(String pName, String reNum) {// 测试修改
Session session = null;
try {
session = HibernateSessionFactory.getSession();
session.beginTransaction();
Query query = session.createQuery("from Person where PName=?");
query.setString(0, pName);
if (query.list().size() != 0) {
Person person = (Person) query.list().get(0);
Card card = person.getCard();
card.setCNum(reNum);
session.saveOrUpdate(person);
System.out.println(pName + "的卡号修改为:" + reNum);
} else {
System.out.println("null");
}
session.beginTransaction().commit();
session.close();
} catch (Exception e) {
// TODO: handle exception
if (session != null) {
session.close();
}
}
}
public static void main(String[] args) {
// new CardDAO().insert("p2","c2");
// new CardDAO().delete("p1");
// new CardDAO().select("p2");
new CardDAO().update("p2", "c22244");
}
}
二.唯一外键关联
create table simon.person(
p_id varchar2(32) primary key,
p_name varchar2(20),
p_address varchar2(40),
p_date date
)
create table simon.card(
c_id varchar2(32) primary key,
c_balance number(6,2),
c_date date,
f_p_id varchar2(32) unique,
foreign key(f_p_id) references simon.person(p_id)
)
配置文件
<class name="onetoone.Card" table="CARD" schema="SIMON"> <id name="CId" type="java.lang.String"> <column name="C_ID" length="32" /> <generator class="uuid.hex"></generator> </id> <property name="CBalance" type="java.lang.Double"> <column name="C_BALANCE" precision="6" /> </property> <property name="CDate" type="java.util.Date"> <column name="C_DATE" length="7" /> </property> <many-to-one name="person" class="onetoone.Person" column="f_p_id" cascade="all" unique="true"> </many-to-one> </class> <class name="onetoone.Person" table="PERSON" schema="SIMON"> <id name="PId" type="java.lang.String"> <column name="P_ID" length="32" /> <generator class="uuid.hex"></generator> </id> <property name="PName" type="java.lang.String"> <column name="P_NAME" length="20" /> </property> <property name="PAddress" type="java.lang.String"> <column name="P_ADDRESS" length="40" /> </property> <property name="PDate" type="java.util.Date"> <column name="P_DATE" length="7" /> </property> <one-to-one name="card" class="onetoone.Card" property-ref="person" cascade="all"> </one-to-one> </class>