Ich arbeite derzeit an der Entwicklung einer einfachen Java-Webanwendung ohne Verwendung eines ORM.Lazy Loading in benutzerdefinierten ORM
Es ist eine geschichtete Architektur. Ich verwende Annotationen, um die Spalten meiner Domain-Klasse in meine Persistenz-Ebene zu "mappen", in der sich die Repositories befinden.
Meine DefaultRepository
verwendet Reflektion, um die Feldnamen zu erhalten und die Abfragen zu erstellen. Ich benutze nur dieses, anstatt ein separates für jede Domäne (wie Benutzer, Bestellung, Produkt) zu machen.
Es sieht wie folgt aus:
Repository:
public abstract class DefaultRepository <TYPE extends DefaultDomain<TYPE>>{
public int insert(Connection con, TYPE entity){};
public int update (Connection con, TYPE entity){};
public int delete (Connection con, TYPE entity){};
public int findById(Connection con, int id){};
...
}
ich faul Laden implementieren möchten nur die Aufträge jedes Benutzers zu laden, wenn angefordert. Dies geschieht vorzugsweise im Repository in der , wo ich die Ergebnismenge auf meine TYPE
(Domain-Klasse) zuordnen.
Wie würde ich diese Fremdschlüsselbeziehung/eins zu vielen/vielen zu einem allgemein implementieren?
Eine Idee war, eine Annotation mit dem spezifischen Repository zu machen und dann die findAll()
Methode aufzurufen, wenn die Orderliste aufgerufen wird.
Zum Beispiel:
public class Order extends DefaultDomain{
@ManyToOne(repository=UserRepository.class)
private User user;
}
Ist das der richtige Weg? Gibt es einen anderen/besseren Ansatz?
Sie ein ORM verwenden. Sie entscheiden sich dafür, Ihre eigenen zu schreiben. Die Anmerkungen, die Sie geschrieben haben, sind genau diejenigen, die JPA verwendet. – duffymo
Ja danke, ich habe es schlecht formuliert. Ich habe versucht, herauszufinden, wie JPA/Hibernate das macht, konnte aber nichts Code finden, nur wie man es benutzt. – user9136913
Sie können JPA-Annotation @ManyToOne verwenden (Fetch = FetchType.LAZY) – Mazen