セッションから 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 を一度だけ定義してどこでも使用できる方法はありますか?
コメントしてくれてありがとう。ダニエル