组件映射:将一个对象属性组合到另外一个对象中(如两张表在数据库中组合成一张表),一个类中的属性包含另一个类的对象的引用
1、通过Annotation注解
Person.java:
package com.bean; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.OneToOne; public class Person { private String wifeName; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getWifeName() { return wifeName; } public void setWifeName(String wifeName) { this.wifeName = wifeName; } }PersonID.java:
package com.bean; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.OneToOne; @Entity public class PersonID { private int id; private String name; Person person; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Embedded public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } } cfg.xml文件中只需映射PersonId即可: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/user</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="current_session_context_class">thread</property> <mapping class="com.bean.PersonID"/> </session-factory> </hibernate-configuration> 2、通过XML配置:Husband.java:
package com.bean; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToOne; public class Husband { private int id; private String name; private Wife wife; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; } } Wife.java: package com.bean; import javax.persistence.Entity; import javax.persistence.Id; public class Wife { private String wifeName; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getWifeName() { return wifeName; } public void setWifeName(String wifeName) { this.wifeName = wifeName; } } hbm.xml配置: <?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> <class name = "com.bean.Husband" table = "Husband" > <id name = "id" column="id"> <generator class="native"/> </id> <property name="name" /> <component name="wife" > <property name="wifeName"/> <property name="age"/> </component> </class> </hibernate-mapping> cfg.xml修改映射: <mapping resource="com/bean/Husband.hbm.xml"/>