我们以Customer为例,Customer中有firstName何laseName这两个属性,而在数据库中并没有这两个属性对应的字段,仅有一个name字段。
Hibernate只是对应pojo中的set,get方法,至于你的pojo里面是否有这个name这个private属性无关紧要,只要有setName,getName方法即可。因为当hibernate执行save,update,saveorupdate时,是找对应字段名的get方法。当执行load,find,get方法时,是找对应字段名的set方法而已,跟你是否在pojo声明这个私有属性无任何关系,只要有与字段名对应的set,get方法即可。
下面是DEMO:
[color=red]这个是Customer的POJO[/color]
[color=red]这个是映射文件[/color]
[color=red]这个测试用例[/color]
[color=red]这个是sql文件[/color]
[color=red]Hibernate日志[/color]
Hibernate:
insert
into
hibernate.customer
(name)
values
(?)
Hibernate:
select
customer0_.oid as oid0_0_,
customer0_.name as name0_0_
from
hibernate.customer customer0_
where
customer0_.oid=?
firstName:威廉 lastName:史密斯
Hibernate只是对应pojo中的set,get方法,至于你的pojo里面是否有这个name这个private属性无关紧要,只要有setName,getName方法即可。因为当hibernate执行save,update,saveorupdate时,是找对应字段名的get方法。当执行load,find,get方法时,是找对应字段名的set方法而已,跟你是否在pojo声明这个私有属性无任何关系,只要有与字段名对应的set,get方法即可。
下面是DEMO:
[color=red]这个是Customer的POJO[/color]
public class Customer implements java.io.Serializable {
// Fields
private long oid;
private String firstName;
private String lastName;
public long getOid() {
return oid;
}
public void setOid(long oid) {
this.oid = oid;
}
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;
}
//注意这个地方,是与数据库中的name字段是对应的.
public void setName(String name) {
StringTokenizer t = new StringTokenizer(name);
setFirstName(t.nextToken());
setLastName(t.nextToken());
}
public String getName() {
return getFirstName() + " " + getLastName();
}
public String toString() {
return "firstName:"+this.firstName+" lastName:"+this.lastName;
}
}
[color=red]这个是映射文件[/color]
<hibernate-mapping>
<class name="cn.com.test.Customer" table="customer" catalog="hibernate">
<id name="oid" type="long">
<column name="oid" />
<generator class="native"></generator>
</id>
<property name="name" type="string">
<column name="name" length="25" />
</property>
</class>
</hibernate-mapping>
[color=red]这个测试用例[/color]
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Session session = HibernateSessionFactory.getSession();
Transaction tran = null;
try {
tran = session.beginTransaction();
Customer customer = new Customer();
customer.setFirstName("威廉");
customer.setLastName("史密斯");
session.save(customer);
tran.commit();
} catch (Exception e) {
if (tran != null) {
tran.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
Session session2 = HibernateSessionFactory.getSession();
Transaction tran2 = null;
Customer customer = null;
try {
tran2 = session2.beginTransaction();
customer = (Customer)session2.get(Customer.class, new Long(1));
tran2.commit();
} catch (Exception e) {
if (tran2 != null) {
tran2.rollback();
}
e.printStackTrace();
} finally {
session2.close();
}
if (customer != null) {
System.out.println(customer.toString());
}
}
}
[color=red]这个是sql文件[/color]
CREATE TABLE `customer` (
`oid` bigint(20) NOT NULL auto_increment,
`name` varchar(25) default NULL,
PRIMARY KEY (`oid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
[color=red]Hibernate日志[/color]
Hibernate:
insert
into
hibernate.customer
(name)
values
(?)
Hibernate:
select
customer0_.oid as oid0_0_,
customer0_.name as name0_0_
from
hibernate.customer customer0_
where
customer0_.oid=?
firstName:威廉 lastName:史密斯