1

セッションから JPA の使用への移行を行っているため、hbm.xml ファイルにほとんどのマッピング定義があります。これを機能させるには、persistence.xml ファイルを作成し、そこから hibernate.cfg.xml を参照します。また、HibernateUtil をリファクタリングし、SessionFactory と Session の使用を EntityManagerFactory と EntityManager に置き換えます。すべて問題ないように見えるので、テストを実行して、EntityManagerFactory を構築できるかどうかを確認します。これを行うと、すべての hbm.xml ファイルが正常に処理されていることがわかりましたが、休止状態はユーザー タイプのタイプを特定できませんでした。このユーザー タイプの定義が古い hibernate.cfg.xml と SessionFactory でどのように機能するか、これを次のように定義した任意の hbm.xml ファイルにタグtypedefがあります。

<typedef class="com.mycompany.myproduct.hibernate.MyUserType" name="my_type"/>

そして、次のように複数の hbm.xml ファイルで使用しました。

<property name="code" column="cod" type="my_type"/>

したがって、いくつかの hbm.xml ファイルで一度定義しましたが、エイリアスによってのみ参照される他の hbm.xml ファイルで使用できます。JPA EntityManagerFactory では、同じようには機能しません。つまり、使用したい各 hbm.xml ファイルでtypedefタグを定義する必要があります。そうしないと、例外が発生します。

Caused by: org.hibernate.MappingException: Could not determine type for: my_type, at table: mytable, for columns .....

質問は:

  • これは EntityManagerFactory で予想される動作ですか、それとも何か間違っているのでしょうか?
  • typedef を一度だけ定義してどこでも使用できる方法はありますか?

コメントしてくれてありがとう。ダニエル

4

0 に答える 0