Hibernate之---复合主键

数据库脚本:

  
  
  
  
  1. create table people(  
  2. name varchar(100) not null,  
  3. phone varchar(50) not null,  
  4. age int,  
  5. primary key(name,phone)  
  6. ); 

一、不把复合主键封装成类

hibernate.cfg.xml

  
  
  
  
  1. <?xml version='1.0' encoding='UTF-8'?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC 
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5.  
  6. <!-- Generated by MyEclipse Hibernate Tools. -->  
  7. <hibernate-configuration>  
  8. <session-factory>  
  9. <property name="connection.username">sa</property>  
  10. <property name="connection.url">  
  11. jdbc:microsoft:sqlserver://localhost:1433  
  12. </property>  
  13. <property name="dialect">  
  14. org.hibernate.dialect.SQLServerDialect  
  15. </property>  
  16. <property name="myeclipse.connection.profile">sql2000</property>  
  17. <property name="connection.password">sa</property>  
  18. <property name="connection.driver_class">  
  19. com.microsoft.jdbc.sqlserver.SQLServerDriver  
  20. </property>  
  21. <property name="show_sql">true</property>  
  22. <mapping resource="org/myhibernate/demo02/People.hbm.xml" />  
  23. </session-factory>  
  24. </hibernate-configuration> 

People.hbm.xml

  
  
  
  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!--   
  5. Mapping file autogenerated by MyEclipse Persistence Tools  
  6. -->  
  7. <hibernate-mapping>  
  8. <class name="org.myhibernate.demo02.People" table="people" schema="dbo" catalog="mldn">  
  9. <composite-id>  
  10. <key-property name="name" type="java.lang.String">  
  11. <column name="name" length="100" />  
  12. </key-property>  
  13. <key-property name="phone" type="java.lang.String">  
  14. <column name="phone" length="50" />  
  15. </key-property>  
  16. </composite-id>  
  17. <property name="age" type="java.lang.Integer">  
  18. <column name="age" />  
  19. </property>  
  20. </class>  
  21. </hibernate-mapping>  
  22.  
  23. People.kava   
  24.  
  25. package org.myhibernate.demo02;  
  26.  
  27. import java.io.Serializable;  
  28.  
  29. import org.apache.commons.lang.builder.EqualsBuilder;  
  30. import org.apache.commons.lang.builder.HashCodeBuilder;  
  31.  
  32. public class People implements Serializable {  
  33.  
  34. private String name;  
  35.  
  36. private String phone;  
  37.  
  38. private int age;  
  39.  
  40. @Override //此处使用到了Apache的开源工具包commons-lang-2.3.jar 复写equals和hashCode方法  
  41. public boolean equals(Object obj) {  
  42. if (this == obj) {  
  43. return true;  
  44. }  
  45. if (!(obj instanceof People)) {  
  46. return false;  
  47. }  
  48. People p = (People) obj;  
  49. return new EqualsBuilder().append(this.name, p.name).append(this.phone,  
  50. p.phone).append(this.age, p.age).isEquals();  
  51. }  
  52.  
  53. @Override  
  54. public int hashCode() {  
  55.  
  56. return new HashCodeBuilder().append(this.name).append(this.phone)  
  57. .append(this.age).toHashCode();  
  58. }  
  59.  
  60. public int getAge() {  
  61. return age;  
  62. }  
  63.  
  64. public void setAge(int age) {  
  65. this.age = age;  
  66. }  
  67.  
  68. public String getName() {  
  69. return name;  
  70. }  
  71.  
  72. public void setName(String name) {  
  73. this.name = name;  
  74. }  
  75.  
  76. public String getPhone() {  
  77. return phone;  
  78. }  
  79.  
  80. public void setPhone(String phone) {  
  81. this.phone = phone;  
  82. }  

PeopleDAO.java

  
  
  
  
  1. package org.myhibernate.demo02;  
  2.  
  3. import org.hibernate.Session;  
  4. import org.hibernate.cfg.Configuration;  
  5.  
  6. public class PeopleDAO {  
  7.  
  8. private Session session;  
  9.  
  10. public PeopleDAO() {  
  11. this.session = new Configuration().configure().buildSessionFactory()  
  12. .openSession();  
  13. }  
  14.  
  15. public void insert(People p){  
  16. this.session.save(p);  
  17. this.session.beginTransaction().commit();  
  18. }  

Test.java(测试文件)

  
  
  
  
  1. package org.myhibernate.demo02;  
  2.  
  3. public class Test {  
  4.  
  5. /**  
  6. * @param args  
  7. */  
  8. public static void main(String[] args) {  
  9. People p = new People();  
  10. PeopleDAO pdao = new PeopleDAO();  
  11.  
  12. p.setName("咖啡迷");  
  13. p.setPhone("8888888");  
  14. p.setAge(23);  
  15.  
  16. pdao.insert(p);  
  17. }  

二、把复合主键封装成类

hibernate.cfg.xml

  
  
  
  
  1. <?xml version='1.0' encoding='UTF-8'?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC 
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5.  
  6. <!-- Generated by MyEclipse Hibernate Tools. -->  
  7. <hibernate-configuration>  
  8.  
  9. <session-factory>  
  10. <property name="connection.username">sa</property>  
  11. <property name="connection.url">  
  12. jdbc:microsoft:sqlserver://localhost:1433  
  13. </property>  
  14. <property name="dialect">  
  15. org.hibernate.dialect.SQLServerDialect  
  16. </property>  
  17. <property name="myeclipse.connection.profile">sql2000</property>  
  18. <property name="connection.password">sa</property>  
  19. <property name="connection.driver_class">  
  20. com.microsoft.jdbc.sqlserver.SQLServerDriver  
  21. </property>  
  22. <property name="show_sql">true</property>  
  23. <mapping resource="org/myhibernate/demo03/People.hbm.xml" />  
  24. </session-factory>  
  25. </hibernate-configuration> 

People.hbm.xml

  
  
  
  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!--   
  5. Mapping file autogenerated by MyEclipse Persistence Tools  
  6. -->  
  7. <hibernate-mapping>  
  8. <class name="org.myhibernate.demo03.People" table="people" schema="dbo" catalog="mldn">  
  9. <composite-id name="id" class="org.myhibernate.demo03.PeopleId">  
  10. <key-property name="name" type="java.lang.String">  
  11. <column name="name" length="100" />  
  12. </key-property>  
  13. <key-property name="phone" type="java.lang.String">  
  14. <column name="phone" length="50" />  
  15. </key-property>  
  16. </composite-id>  
  17. <property name="age" type="java.lang.Integer">  
  18. <column name="age" />  
  19. </property>  
  20. </class>  
  21. </hibernate-mapping> 

People.java

  
  
  
  
  1. package org.myhibernate.demo03;  
  2.  
  3. /**  
  4. * People generated by MyEclipse Persistence Tools  
  5. */  
  6.  
  7. public class People implements java.io.Serializable {  
  8.  
  9. // Fields  
  10.  
  11. private PeopleId id;  
  12.  
  13. private Integer age;  
  14.  
  15. // Constructors  
  16.  
  17. /** default constructor */  
  18. public People() {  
  19. }  
  20.  
  21. /** minimal constructor */  
  22. public People(PeopleId id) {  
  23. this.id = id;  
  24. }  
  25.  
  26. /** full constructor */  
  27. public People(PeopleId id, Integer age) {  
  28. this.id = id;  
  29. this.age = age;  
  30. }  
  31.  
  32. // Property accessors  
  33.  
  34. public PeopleId getId() {  
  35. return this.id;  
  36. }  
  37.  
  38. public void setId(PeopleId id) {  
  39. this.id = id;  
  40. }  
  41.  
  42. public Integer getAge() {  
  43. return this.age;  
  44. }  
  45.  
  46. public void setAge(Integer age) {  
  47. this.age = age;  
  48. }  

PeopleId.java

  
  
  
  
  1. package org.myhibernate.demo03;  
  2.  
  3. /**  
  4. * PeopleId generated by MyEclipse Persistence Tools  
  5. */  
  6.  
  7. public class PeopleId implements java.io.Serializable {  
  8.  
  9. // Fields  
  10.  
  11. private String name;  
  12.  
  13. private String phone;  
  14.  
  15. // Constructors  
  16.  
  17. /** default constructor */  
  18. public PeopleId() {  
  19. }  
  20.  
  21. /** full constructor */  
  22. public PeopleId(String name, String phone) {  
  23. this.name = name;  
  24. this.phone = phone;  
  25. }  
  26.  
  27. // Property accessors  
  28.  
  29. public String getName() {  
  30. return this.name;  
  31. }  
  32.  
  33. public void setName(String name) {  
  34. this.name = name;  
  35. }  
  36.  
  37. public String getPhone() {  
  38. return this.phone;  
  39. }  
  40.  
  41. public void setPhone(String phone) {  
  42. this.phone = phone;  
  43. }  
  44.  
  45. public boolean equals(Object other) {  
  46. if ((this == other))  
  47. return true;  
  48. if ((other == null))  
  49. return false;  
  50. if (!(other instanceof PeopleId))  
  51. return false;  
  52. PeopleId castOther = (PeopleId) other;  
  53.  
  54. return ((this.getName() == castOther.getName()) || (this.getName() != null 
  55. && castOther.getName() != null && this.getName().equals(  
  56. castOther.getName())))  
  57. && ((this.getPhone() == castOther.getPhone()) || (this  
  58. .getPhone() != null 
  59. && castOther.getPhone() != null && this.getPhone()  
  60. .equals(castOther.getPhone())));  
  61. }  
  62.  
  63. public int hashCode() {  
  64. int result = 17;  
  65.  
  66. result = 37 * result  
  67. + (getName() == null ? 0 : this.getName().hashCode());  
  68. result = 37 * result  
  69. + (getPhone() == null ? 0 : this.getPhone().hashCode());  
  70. return result;  
  71. }  

PeopleDAO.java

  
  
  
  
  1. package org.myhibernate.demo03;  
  2.  
  3. import org.hibernate.Session;  
  4. import org.hibernate.cfg.Configuration;  
  5.  
  6. public class PeopleDAO {  
  7.  
  8. private Session session;  
  9.  
  10. public PeopleDAO() {  
  11. this.session = new Configuration().configure().buildSessionFactory()  
  12. .openSession();  
  13. }  
  14.  
  15. public void insert(People p){  
  16. this.session.save(p);  
  17. this.session.beginTransaction().commit();  
  18. }  

Test.java(测试文件)

  
  
  
  
  1. package org.myhibernate.demo03;  
  2.  
  3. public class Test {  
  4.  
  5. /**  
  6. * @param args  
  7. */  
  8. public static void main(String[] args) {  
  9. People p = new People();  
  10. PeopleId id = new PeopleId();  
  11. PeopleDAO pdao = new PeopleDAO();  
  12.  
  13. id.setName("hi.baidu.com/javajavajava");  
  14. id.setPhone("8888888");  
  15.  
  16. p.setId(id);  
  17. p.setAge(23);  
  18.  
  19. pdao.insert(p);  
  20. }  

 

你可能感兴趣的:(Hibernate,主键,复合)