我们在 Constants.java 中定义了以下 Java 枚举:
public enum ComponentType implements IsSerializable {
NOC("NOC"),
// other values not shown
;
}
我们有一个 Component 类,它有一个 ComponentType 类型的字段:
public class Component implements Serializable {
private ComponentType type = null;
// other code not shown
}
我们有一个 Component.hbm.xml Hibernate 映射文件,它将枚举字段映射到列:
<hibernate-mapping default-lazy="false">
<class name="our.package.Component" table="Component">
<property name="type" column="TYPE">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">our.package.Constants$ComponentType</param>
<param name="type">12</param>
</type>
</property>
<!-- other mappings not shown -->
</class>
</hibernate-mapping>
我们有一个带有以下方法的 DAO 来查询任何字段的任何值:
protected T loadByX(Class<T> entityClass, String fieldName, Object fieldValue) {
T result = null;
try {
session = HibernateUtil.currentSession();
result = (T) session.createCriteria(entityClass).add(Restrictions.eq(fieldName, fieldValue)).uniqueResult();
session.close();
}
catch (HibernateException he) {
// code not shown
}
return result;
}
然后我们有以下调用 DAO 的代码:
Component component = instanceOfComponentDao.loadByX(Component.class, "type", Constants.ComponentType.NOC);
if (component == null) {
//
// SECTION A
//
}
当数据库是 MySQL 时,此代码均有效。在 COMPONENT 表中,有一行类型列的值为“NOC”,它通过调用 loadByX() 得到返回,并且“SECTION A”代码不执行。
但是,当数据库是 Oracle 11 时,此代码不起作用。 COMPONENT 表有一行类型列的值为“NOC”,但调用 loadByX() 时返回空值,因为“SECTION A”代码被执行。
知道将此代码与 Oracle 一起使用时有什么问题吗?