0

Java アプリケーションの DAO レイヤーに次のメソッドがあります。

public void save(Employee emp) {
     System.out.println("emp type: " + emp.getClass().getName);
     getHibernateTemplate().save(emp);
     System.out.println("object saved!");
     System.out.flush();
}

従業員クラスは、他のどのクラスからも拡張されておらず、次の hbm ファイルを持っています。

<hibernate-mapping>    
 <class name="org.myCompany.Employee" table="employee">
 <!-- fields omitted to save space -->
</hibernate-mapping>

しかし、挿入は java.lang.ClassCastException で失敗します。最初は、マッピングに何か問題があると思いました (整数からブール値へのマッピングなど) が、hibernate の show_sql デバッグをオンにすると、ログ ファイルに次のようなものが見つかりました。

emp タイプ: org.myCompany.Employee
Hibernate: 顧客に挿入 (.......) 値 (......)
java.lang.ClassCastException

挿入する完全にランダムなテーブルを選択したのはなぜですか? 構成ファイルの構成が間違っているに違いないと確信していますが、どのファイルかわかりません。私は以下をチェックしました:

  • applicationContext-hibernate.xml -> Customer オブジェクトと Employee オブジェクトの両方が正しい hbm ファイルにマップされます
  • Customer にも Employee にも継承関係はありません (Person や User のような共通の親クラスさえありません)

他に何を試すことができますか?

4

1 に答える 1

0

呼び出しクラスには、次の 2 つの呼び出しがあります。

UserDAO.saveCustomer(customer);
UserDAO.saveEmployee(employee);

顧客オブジェクトが正しく保存されていると思いました。2 つの呼び出しの間にデバッグ ステートメントを挿入し、デバッグ メソッドを出力しました。ただし、 UserDAO.saveCustomer 行をコメントアウトすると、問題が修正されました。これにより、顧客オブジェクトをより詳しく調べることができ、破損している (間違ったクラス) ことがわかりました。Hibernate は、トランザクションが完了するまで挿入ステートメントをキャッシュしていたに違いありません。

したがって、この問題は解決されました。

于 2010-07-12T17:49:57.307 に答える