Hibernate 、多表关联映射-组件关联映射(component)-LMLPHP

组件关联映射可以将一些简小的数据与主题放在一个表中,例如firstName 和LastName这两个结合在一起可以组成一个名字,但是再分别将这两个再建一个表就不太合适了,这个时候可以用到组件关联映射;

hibernate.cfg.xml:

<hibernate-configuration>
<session-factory name="sessionFactory">
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="cn/hbm/Person2.hbm.xml" />
</session-factory>
</hibernate-configuration>

Person:

public class Person2 {
private Integer id;
private Name name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
} }

name:

public class Name {

	private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}

hbm.xml

<hibernate-mapping package="cn.model">
<class name="Person2" table="PERSON2">
<id name="id" column="ID">
<generator class="native"></generator>
</id>
<component name="name">
<property name="firstName" column="FIRST_NAME" />
<property name="lastName" column="LAST_NAME" />
</component>
</class>
</hibernate-mapping>
	public void saveZujian(){
Session session=null;
Transaction tran=null;
try{
Person2 person=new Person2();
Name name=new Name();
name.setFirstName("jack");
name.setLastName("tomson");
person.setName(name);
session=HibernateSessionFactory.getSession();
tran=session.beginTransaction();
session.save(person);
tran.commit();
}catch(Exception e){
if(session!=null){
session.close();
}
}
}

执行保存以后可看到生成的SQL

Hibernate 、多表关联映射-组件关联映射(component)-LMLPHP

确实创建在一张表中了。

Hibernate 、多表关联映射-组件关联映射(component)-LMLPHP

执行查询:

public Person2 getPersonById(Integer id){
Session session=null;
try{
session=HibernateSessionFactory.getSession();
return (Person2)session.get(Person2.class, id);
}catch(Exception e){
if(session!=null){
session.close();
}
}
return null;
}

Hibernate 、多表关联映射-组件关联映射(component)-LMLPHP

04-23 17:08