私のアプリケーションには、IDと名前の列を持つ250以上のテーブルがあります。私は、アプリケーションをhibernate 3からSpring-JPA 4.3に移行しようとしています。複数のエンティティファインダを持つ一般的なspring jpaリポジトリ
public class DAO
{
private Session session;
public DAO(Session session)
{
this.session=session;
}
public EntityA findById(String id)
{
//implementation
return entityA;
}
public EntityB findByName(String name)
{
//implementation
return entityB;
}
public EntityC findByIdAndName(String id, String name)
{
//implementation
return entityC;
}
}
私はより一般的な方法で、以下の行っている可能性日間で戻る
が、私は私が持っている場合は、このクラスを再初期化したくなかった。私の現在の休止層で
私は(オプション1)を持っていますIDでフェッチする10の異なるエンティティ。
public class DAO<T>
{
public T findById(String id)
{
//implementation
return T;
}
public T findByName(String name)
{
//implementation
return T;
}
public T findByIdAndName(String id, String name)
{
//implementation
return T;
}
}
これをSpring-JPAでどのように実現できますか。だから私はIDで10の異なるエンティティを取得する必要がある場合、私は10のリポジトリを初期化したくない、私はbyIdまたはbyNameまたはbyIDAndNameが必要な任意のエンティティをフェッチするために使用できる1つのリポジトリを持っている。私はJdbcTemplateで簡単にそれを行うことができますが、それはJPA/hibernateのキャッシュメカニズムでは追跡できないことを意味します。あなたは、共通の属性を持つスーパークラス(複数可)を作成@MappedSuperclassとしてマークしてリポジトリを作成することができるはず
{
@Query("from EntityA where id=?1")
EntityA findEntityAById(String id);
@Query("from EntityB where name=?1")
EntityB findEntityBById(String name);
@Query("from EntityC where id=?1 and name=?2")
EntityC findEntityCById(String id,String name);
}
Spring JPAの代わりにSpring Data JPAを使用していますか?あなたはできません...自分の実装を書いてください... –