1. 程式人生 > 其它 >Hibernate雙向一對一物件關係模型對映

Hibernate雙向一對一物件關係模型對映

技術標籤:M程式設計框架hibernate

一個員工一輛車: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的主鍵和外來鍵