2017-11-15 15 views
0

私のチームは、Spring Boot、Spring Data、Thymeleaf、およびJPA/Hibernateで構築されたWebアプリケーションを管理しています。SpringDataのDomainClassConverterはHibernateプロキシで動作するはずですか?

によって引き起こさ::org.springframework.core.convert.ConverterNotFoundException:我々は最近、原因型変換の問題に評価することができないThymeleafのテンプレートSpringEL式の問題を打つませコンバータは、タイプ[COMから変換することが可能見つかりません.xyz.app.model.Employee _ $$ _ jvst7ca_34]入力する[java.lang.Stringで]

式は、従業員がスプリングコントローラによってモデルに配置されたエンティティである$ {{}}従業員です。従業員エンティティは春データリポジトリへの単純な呼び出しで取得されます。デバッグ中

@ModelAttribute("employee") 
public Employee getEmployee(@PathVariable("employeeId") long employeeId) { 
    return employeeRepository.findOne(employeeId); 
} 

、私はあなたがログから例外要因に見ることができるようにエンティティが返された従業員が、実際にはHibernateの代理であることに気づきました - Employeeクラスは、Javassistのサフィックスを持っています_$$_jvst7ca_34

春データは、SpringのGenericConversionService@EnableSpringDataWebSupport注釈が存在している$ {{}}従業員のような発現のためのIDにエンティティを変換するべきでDomainClassConverterを登録します。 Springブートは自動設定クラスSpringDataWebAutoConfigurationを提供し、デフォルトでこれを有効にします。私は、この自動設定クラスがアプリケーションによって適用されていることを確認しました。

また、GenericConversionServiceDomainClassConverter.ToIdConverterを取得したことをデバッグによって確認したところ、Employee _ $$ _ jvst7ca_34からStringに変換しようとしました。ただし、DomainClassConverter.ToIdConverter.matches(sourceType, targetType)はfalseを返しますので、コンバータは使用されません。 Employee_$$_jvst7ca_34Repositoriesのリポジトリが見つからないため、falseを返します。デバッガでは、リポジトリリストの従業員リポジトリが唯一Employeeであることがわかります。

DomainClassConverterのバグですか?プロキシのリポジトリを取得することはできませんか?遅延プロキシを持つエンティティ(推奨収集タイプ)がプロキシとして戻ってくるので、プロキシはかなり共通しているようです。それとも、何か間違っているのですか?どんなヒントも非常に高く評価されます!

答えて

0

これは、Spring Data Commonsのバグであることが判明しました。 issueが修正されました。将来のリリースでは、プロキシの変換が可能になるはずです。

関連する問題