如果一张表有很多字段,那么我们除了将表进行拆分之外,在hibernate中我们还有一种很好的方法,我们可以将表中的字段进行分类,然后将同一类的
用对象进行封装,这就是我们这儿用到的Component技术:
1、
package domain;
public class Address {
private String city;
private String street;
private String zipcode;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
2、
package domain;
public class Person {
private Long id;
private String name;
private Address fimallyAddr;
private Address mailAddr;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getFimallyAddr() {
return fimallyAddr;
}
public void setFimallyAddr(Address fimallyAddr) {
this.fimallyAddr = fimallyAddr;
}
public Address getMailAddr() {
return mailAddr;
}
public void setMailAddr(Address mailAddr) {
this.mailAddr = mailAddr;
}
}
4、
<class name="domain.Person" table="PERSON" schema="scott">
<id name="id" column="ID">
<generator class="increment"></generator>
</id>
<property name="name" column="NAME"></property>
<component name="fimallyAddr" class="domain.Address">
<property name="city" column="ADDRESS_CITY"></property>
<property name="street" column="ADDRESS_STREET"></property>
<property name="zipcode" column="ADDRESS_ZIPCODE"></property>
</component>
<component name="mailAddr" class="domain.Address">
<property name="city" column="mailing_city"></property>
<property name="street" column="mailing_street"></property>
<property name="zipcode" column="mailing_zipcode"></property>
</component>
</class>
4、测试package junit;
import org.hibernate.Session;
import org.hibernate.Transaction;
import domain.Address;
import domain.Person;
import util.HibernateSessionFactory;
import junit.framework.TestCase;
public class TestComponent extends TestCase {
public void testInsertPerson(){
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
Person p=new Person();
p.setName("李开复");
Address fimallyAddr=new Address();
fimallyAddr.setCity("北京");
fimallyAddr.setStreet("中关村");
fimallyAddr.setZipcode("100010");
Address mailAddr=new Address();
mailAddr.setCity("上海");
mailAddr.setStreet("香港路");
mailAddr.setZipcode("10008");
p.setFimallyAddr(fimallyAddr);
p.setMailAddr(mailAddr);
try{
session.save(p);
tx.commit();
}catch(Exception e){
e.printStackTrace();
//回滚
tx.rollback();
}finally{
HibernateSessionFactory.closeSession();
}
}
}