夜光带你走进Hibernate(三)

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/89235885

夜光序言:

 

 

取万家之众长,自成一家,取长补短,相互兼并,兼容并蓄,海纳百川。

 

 

正文:

6. 联合主键映射

夜光:联合主键,

多列共同作为主键~~

夜光:数据库,联合主键:

 

-- 联合主键  (hbm:   <composite-id></composite-id>   )

CREATE TABLE test(

  id1 INT,

  id2 INT,

  PRIMARY KEY(id1,id2)

);  

 

SELECT * FROM test;

-- 插入

INSERT INTO test VALUES(1,1);

INSERT INTO test VALUES(1,2);  

INSERT INTO test VALUES(1,2);  -- 错误

 

 

需求:

保存员工信息: 名称、地址、部门、年龄

(联合主键:名称、地址)

 

设计javabean:

写映射:

App:

 

/**

 * 夜光:联合主键对象, 必须要实现可课序列化标记~~帅气

 */

public class CompositeKeys implements Serializable{

 

private String name;

private String address;

   ..

}

// 夜光:员工

public class Employee {

 

 // 夜光:名称、地址、部门、年龄

 

// 联合主键对象

private CompositeKeys keys;

private String dept;

private Date birth;

..

}

 

Employee的映射:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC 

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping package="cn.Genius.c_composite">

<class name="Employee" table="t_employee">

<composite-id name="keys">

<key-property name="name"></key-property>

<key-property name="address"></key-property>

</composite-id>

 

<property name="dept" length="50"></property>

<property name="birth" type="date"></property>

</class>

 

 

</hibernate-mapping>

 

 

 

 

 

 

 

 

 

测试

 

public class App {

private static SessionFactory sf;

static {

sf = new Configuration().configure().buildSessionFactory();

}

 

@Test

public void testSave() throws Exception {

Session session = sf.openSession();

session.beginTransaction();

 

// 联合主键对象

CompositeKeys keys = new CompositeKeys();

keys.setName("Genius");

keys.setAddress("夜光之屋...");

 

// 对象

Employee emp = new Employee();

emp.setKeys(keys);

emp.setDept("科技-研发部");

emp.setBirth(new Date());

 

// 保存

session.save(emp);

 

 

session.getTransaction().commit();

session.close();

 

}

 

@Test

public void testGet() throws Exception {

Session session = sf.openSession();

session.beginTransaction();

 

// 联合主键对象

CompositeKeys keys = new CompositeKeys();

keys.setName("Genius");

keys.setAddress("夜光之屋...");

 

Employee employee = (Employee) session.get(Employee.class, keys);

System.out.println(employee.getKeys().getName());

System.out.println(employee.getKeys().getAddress());

System.out.println(employee.getDept());

System.out.println(employee.getBirth());

 

session.getTransaction().commit();

session.close();

 

}

}

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/89235885