0

Constants.java で次の Java 列挙型が定義されています。

public enum ComponentType implements IsSerializable {
    NOC("NOC"),
    // other values not shown
    ;
}

ComponentType 型のフィールドを持つ Component クラスがあります。

public class Component implements Serializable {    
    private ComponentType type = null;
    // other code not shown
}

enum フィールドを列にマップする 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」のタイプ列を持つ 1 つの行があり、loadByX() の呼び出しによって返され、「SECTION A」コードは実行されません。

ただし、データベースが Oracle 11 の場合、このコードは機能しません。 COMPONENT テーブルには、値が "NOC" の型列を持つ行が 1 つありますが、loadByX() の呼び出しによって null 値が返されます。 A" コードが実行されます。

このコードを Oracle で使用する場合、何が問題なのですか?

4

0 に答える 0