hibernate复合主键映射composite-id实例。一般把复合主键相关的属性单独放到一个类中:
* 此类必须实现序列化接口
* 覆写hashcode和equals方法
假如在表中有两个列合起来当主键怎么处理?强烈不建议使用这种方式。 编写一个类(实现序列化接口),封装主键,并写属性。例如:
public class CustomerPK implements Serializable{//主键类
private String account; private String password; public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } |
Po内编写各个属性,包括主键类型。例如:
public class Customer{
private CustomerPK cpk;//主键类 private String cname; private double cbalance; public Customer(){} public double getCbalance() { return cbalance; } public void setCbalance(double cbalance) { this.cbalance = cbalance; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public CustomerPK getCpk() { return cpk; } public void setCpk(CustomerPK cpk) { this.cpk = cpk; } } |
在映射文件中申明复合主键。例如:
<?xml version=”1.0″?>
<!DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”> <hibernate-mapping> <class name=”po.Customer” table=”T_CUSTOMER”> <composite-id name=”cpk”> <!– 复合主键 –> <key-property name=”account” column=”ACCOUNT”> </key-property> <key-property name=”password” column=”PASSWORD”> </key-property> </composite-id> <property name=”cname” column=”CNAME”/> <property name=”cbalance” column=”CBALANCE”/> </class> </hibernate-mapping> |