Hibernate多列作为联合主键(六)

来源:互联网 发布:淘宝装修日记精华帖 编辑:程序博客网 时间:2024/04/28 14:26

如果需要直接将持久类的多列映射成联合主键,则该持久化类必须满足如下条件:

1)        有无参数的构造器。

2)        必须实现java.io.Serializeble接口。

3)        建议正确地重写equals()和hashCode()方法,也就是根据组件类的关键属性来区分组件对象。

下面是一个Person的类。

@Entity@Table(name="person_inf")public class Personimplements java.io.Serializable{// 定义first属性,作为标识属性的成员@Idprivate String first;// 定义last属性,作为标识属性的成员@Idprivate String last;private int age;// first的setter和getter方法public void setFirst(String first){this.first = first;}public String getFirst(){return this.first;}// last的setter和getter方法public void setLast(String last){this.last = last;}public String getLast(){return this.last;}// age的setter和getter方法public void setAge(int age){this.age = age;}public int getAge(){return this.age;}// 重写equals()方法,根据first、last进行判断public boolean equals(Object obj){if (this == obj){return true;}if (obj != null && obj.getClass() == Person.class){Person target = (Person)obj;return target.getFirst().equals(getFirst())&& target.getLast().equals(getLast());}return false;}// 重写hashCode()方法,根据first、last计算hashCode值public int hashCode(){return getFirst().hashCode() * 31+ getLast().hashCode();}}

下面是执行用的类:

public class PersonManager{public static void main(String[] args){PersonManager mgr = new PersonManager();mgr.createAndStorePerson();HibernateUtil.sessionFactory.close();}private void createAndStorePerson(){Session session = HibernateUtil.currentSession();Transaction tx = session.beginTransaction();// 创建Person对象Person person = new Person();person.setAge(29);person.setFirst("owen.org");person.setLast("Hibernate");session.save(person);tx.commit();HibernateUtil.closeSession();}}

结果图:




0 0
原创粉丝点击