Hibernate雙向一對一物件關係模型對映
阿新 • • 發佈:2021-01-02
一個員工一輛車:one-to-one
實現一:讓汽車表中的外來鍵唯一
create table emp ( eid int primary key auto_increment, ename varchar ); create table car ( cid int primary key auto_increment, cnumber varchar, eid int, constraint fk_eid foreign key(eid) referecnces emp(eid), constraint uk_eid unique(eid) );
實現二:讓汽車表中的主鍵引用員工表的主鍵,汽車表中的主鍵也充當外來鍵
create table emp
(
eid int primary key auto_increment,
ename varchar
);
create table car
(
cnumber varchar,
cid int,
constraint fk_cid foreign key(cid) referecnces emp(eid),
constraint pk_cid primary key(cid)
);
2.1描述java的資料模型
2.2配置pojo類
2.3資料庫的資料模型
2.4進行curd操作
2.4.1 新增員工
/** * 新增員工資訊 * ****/ @Test public void saveEmp() { //獲得Session Session session=sf.openSession(); //開啟事務 Transaction tr=session.beginTransaction(); //建立員工物件 Emp emp= new Emp(); emp.setEname("張三"); session.save(emp); //提交事務 tr.commit(); //釋放資源 session.close(); }
2.4.2新增車輛資訊
/**
* 新增車輛資訊
* ****/
@Test
public void saveCar()
{
//獲得Session
Session session=sf.openSession();
//開啟事務
Transaction tr=session.beginTransaction();
//建立汽車物件
Car car = new Car();
car.setCname("奧拓");
//建立員工物件
Emp emp=new Emp();
emp.setEid(1); //給定的id資料庫必須存在[A1]
//指定汽車對應的員工
car.setEmp(emp);
session.save(car);
//提交事務
tr.commit();
//釋放資源
session.close();
}
2.4.3 修改員工資訊
/**
* 修改員工資訊
* ****/
@Test
public void updateEmp()
{
//獲得Session
Session session=sf.openSession();
//開啟事務
Transaction tr=session.beginTransaction();
//查詢員工物件
Emp emp= (Emp) session.get(Emp.class, 1);
emp.setEname("李四");
//獲得該員工的車輛物件
Car car = emp.getCar();
car.setCname("VOV");
//提交事務
tr.commit();
//釋放資源
session.close();
}
2.4.4新增新員工新車輛
預設的級聯效果:因為car的主鍵需要引用emp的主鍵,所以emp必須首先進行儲存
/**
* 新增車輛和員工資訊
* ****/
@Test
public void saveCarEmp()
{
//獲得Session
Session session=sf.openSession();
//開啟事務
Transaction tr=session.beginTransaction();
//建立汽車物件
Car car = new Car();
car.setCname("奧拓");
//建立員工物件
Emp emp=new Emp();
emp.setEname("王五");
//指定汽車對應的員工
car.setEmp(emp);
session.save(car);
System.out.println("emp--------------"+emp.getEid());
//提交事務
tr.commit();
//釋放資源
session.close();
}
2.4.5刪除員工資訊
/***通過員工刪除汽車***/
@Test
public void deleteEmp()
{
//獲得Session
Session session=sf.openSession();
//開啟事務
Transaction tr=session.beginTransaction();
//查詢員工的物件
Emp emp= (Emp) session.get(Emp.class, 1);
//刪除子表
session.delete(emp.getCar());
//刪除主表
session.delete(emp);
//提交事務
tr.commit();
//釋放資源
session.close();
}
2.4.6查詢員工資訊
員工姓名 車輛名稱
/***查詢員工資訊***/
@Test
public void selectEmp()
{
//獲得Session
Session session=sf.openSession();
//開啟事務
Transaction tr=session.beginTransaction();
//查詢員工的物件
List<Emp> elist=session.createCriteria(Emp.class).list();
for(Emp e:elist){
System.out.println(e.getEname()+"\t"+e.getCar().getCname());
}
//提交事務
tr.commit();
//釋放資源
session.close();
}
Emp的id必須在資料庫存在,而且某個員工的id只能使用一次。
Emp的id是cari的主鍵和外來鍵