我的环境是Eclipse3.3(Europa)+hibernate3+oracle10g
一. hibernate生成
1. 生成hibernate.cfg.xml文件,修改相应的数据库连接参数。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="boxfmk">
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">devgen</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@server01:1521:orcl</property>
<property name="hibernate.connection.username">devgen</property>
<property name="hibernate.default_schema">DEVGEN</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
</session-factory>
</hibernate-configuration>
2. open hibernate code generation dialogue中设置一下。在main标签中设置输出生成包的路径等,在exporters标签中设置所要生成的文件类型,这里选择.hbm和.java文件。如图一所示。
二. 相应的修改
1. 所有的hbm文件,加入 “lazy=false”。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2008-3-19 11:03:14 by Hibernate Tools 3.2.0.b9 -->
<hibernate-mapping>
<class name="org.wti.emergencyProcessRecord.domain.EmergencyProcessRecord" table="EMERGENCY_PROCESS_RECORD" lazy="false">
...
2. 类的修改
1) 生成的类全部改成抽象类,类名前加abstract咯,文件名也加上abstract吧;
// Generated 2008-3-19 11:03:13 by Hibernate Tools 3.2.0.b9
/**
* EmergencyProcessRecord generated by hbm2java
*/
public abstract class AbstractEmergencyProcessRecord implements java.io.Serializable {
...
}
2) 删除类中的构造函数(这个不用多解释啦);
3) 类中加上equals和hashcode方法。编辑界面上点击鼠标右键,弹出菜单中选择commons4E lang->generate Equals and Hashcode,在select fields中只选择id一项,如图二所示。
@Override
public boolean equals(final Object other) {
if (!(other instanceof AbstractEmergencyProcessRecord))
return false;
AbstractEmergencyProcessRecord castOther = (AbstractEmergencyProcessRecord) other;
return new EqualsBuilder().append(id, castOther.id).isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(id).toHashCode();
}
4) 重新生成tostring方法,同上,不过这次select fields需要全部选中;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", id).append("name", name).append(
"startDate", startDate).append("endDate", endDate).append("place", place).append("personList",
personList).append("accident", accident).append("processDescription", processDescription).append(
"result", result).append("assessment", assessment).append("author", author).append("lastUpdate",
lastUpdate).append("orgId", orgId).toString();
}
5) 在生成文件同路径下,新建类文件,名称就是hibernate所生成的java文件的名字(原来的文件已经改名字了,前面加abstract成抽象类了),生成后将鼠标光标点在类名上,按ctrl+1,在弹出的菜单中选择add generated serial version id,会产生serialVersionUID,如图三所示。
public class EmergencyProcessRecord extends AbstractEmergencyProcessRecord {
/**
*
*/
private static final long serialVersionUID = 6952531987128218368L;
}
这就完成了domain层的映射,接下来该考虑业务功能了。