Umesh ich Ihnen zeigen, wie wir
Die Schnittstelle
diese Funktionalität implementieren
Da Sie normalerweise nicht alle oben gezeigten Methoden benötigen, erstellen wir eine Zusammenfassung Klasse mit dem Ziel, eine Dummy-Implementierung
public abstract class AbstractRepository<INSTANCE_CLASS, PRIMARY_KEY_CLASS> implements Repository<INSTANCE_CLASS, PRIMARY_KEY_CLASS> {
public void add(INSTANCE_CLASS instance) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void merge(INSTANCE_CLASS instance) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void remove(PRIMARY_KEY_CLASS id) {
throw new UnsupportedOperationException("Not supported yet.");
}
public INSTANCE_CLASS findById(PRIMARY_KEY_CLASS id) {
throw new UnsupportedOperationException("Not supported yet.");
}
public INSTANCE_CLASS findById(PRIMARY_KEY_CLASS id, Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAll() {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAll(Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAll(int pageNumber, int pageSize) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAll(int pageNumber, int pageSize, Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAllByCriteria(Criteria criteria) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAllByCriteria(Criteria criteria, Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAllByCriteria(int pageNumber, int pageSize, Criteria criteria) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAllByCriteria(int pageNumber, int pageSize, Criteria criteria, Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
Nun ist, zum Beispiel, wenn Sie ein Repository wollen die Methode nur hinzufügen muss, können Sie
public class PersonRepository extends AbstractRepository<Person, Integer> {
public void add(Person instance) {
/**
* person implmentatiuon goes here
*/
}
}
Wenn andere Entwickler versuchen, zuzugreifen verwenden andere als Methode hinzufügen, wird er oder sie UnsupportedOperationException
Criteria erhalten ist nur eine Markierungsschnittstelle.
public interface Criteria {}
Der Zweck einiger Methoden definieren einen Parameter Klasse fetchingStrategy ist externalisiert benannten Abfragen entsprechen. Auf diese Weise vermeide ich handcodierte Zeichenketten, die fehleranfällig sind. Dieser Ansatz wird von der JSR-303-Bean-Validierung verwendet, um beispielsweise Gruppen von Eigenschaften zu validieren. Siehe here
public class Person {
public static interface PERSON_WITH_ADDRESS {}
}
Die Abfrage mit dem Namen externalize als
folgt
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<query name="PERSON_WITH_ADDRESS">
<![CDATA[
from
Person p
left join fetch
p.address
]]>
</query>
</hibernate-mapping>
So angezeigt, wenn ich alle Personen mit Adresse abrufen möchten, rufen Sie i
PersonRepository<Person, Integer> respository ...
List<Person> personList = repository.findAll(PERSON_WITH_ADDRESS.class);
findAll kann geschrieben werden
public class PersonRepository extends AbstractRepository<Person, Integer> {
List<Person> findAll(Class fetchingStrategy, Object... args) {
if(fetchingStrategy.isAssignableFrom(PERSON_WITH_ADDRESS.class)) {
sessionFactory.getCurrentSession()
.getNamedQuery(fetchingStrategy.getSimpleName())
.list();
}
throw new UnsupportedOperationException("Not supported yet.");
}
}
das ist wirklich eine gute und sehr informative Antwort –
@umesh awasthi Wenn meine Antwort Ihre Bedürfnisse erfüllen oder nützlich ist, markieren Sie als akzeptiert oder gibt es UPvote. Vielen Dank! –
können Sie erklären, was der Vorteil der Verwendung von marker interface im Gegensatz zu einer statischen endgültigen Zeichenfolge in der Personenklasse ist, ty –