Meine Anwendung verfügt über 250 Tabellen mit jeweils ID- und Namensspalten. Ich versuche, unsere Anwendung von Hibernate 3 zu Spring-JPA 4.3 mit Hibernate 5+ zu migrieren.Gemeinsames Spring-Jpa-Repository mit mehreren Entitätsfindern
In meinem aktuellen Hibernate Schicht I (Option 1):
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;
}
}
Zurück in den nächsten Tagen i die folgenden mit allgemeineren Methoden getan haben könnte, aber ich will nicht diese Klasse neu zu initialisieren, wenn ich 10 verschiedene Entitäten, die nach ID abgerufen werden.
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;
}
}
Nun, wie kann ich dies in Spring-JPA erreichen. Also, wenn ich 10 verschiedene Entitäten nach ID erhalten soll, möchte ich nicht 10 Repositories initialisieren, ich möchte ein Repository haben, das ich verwenden kann, um eine beliebige Entity per Id oder byName oder byIDAndName zu holen. Ich könnte es leicht mit JdbcTemplate tun, aber das bedeutet, dass es nicht durch JPA/Hibernate Caching-Mechanismus verfolgt werden kann.
So wie die folgende in einem PPV-Repository tun können:
{
@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);
}
Anstelle von Spring JPA nehme ich an, du meinst Spring Data JPA? Sie können nicht ... Schreiben Sie einfach Ihre eigene Implementierung ... –