夜光带你走进Hibernate(三)
夜光序言:
取万家之众长,自成一家,取长补短,相互兼并,兼容并蓄,海纳百川。
正文:
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();
} }
|