Hibernate Mapping Queries verringern

Hallo zusammen,

ich hab in mein Projekt jetzt mit Hibernate gearbeitet, an einigen Stellen werden aber so viele Queries erzeugt, dass ich mir denke, es muss auch einfacher gehen.

zb ein Webshop:
Es gibt ein Produkt, dieses hat mehrere Farben (Dummycode)

Product.java
int id;
int name;

@OneToMany
List<Kombination>  kombination;


Kombination.java
String id

@OneToOne
Farbe farbe;

Wenn ich nun ein Produkt aufrufe, wird auch Kombination und Farbe geladen, was bei vielen Produkte, elend viele Queries macht. Ebenso beim speichern.

Sollte ich die Kombination lieber unabhängig vom Produkt sehen? Aber die gehören ja nun mal zusammen.

Ist Hibernate für dieses Beispiel vielleicht sogar nicht wirklich geeignet?

Du kannst mittels FetchType.LAZY dafür sorgen, dass die Relationen nur verfolgt werden, wenn du die Daten davon benötigst.

vgl. https://docs.jboss.org/hibernate/stable/orm/userguide/html_single/Hibernate_User_Guide.html#fetching-fetch-annotation

Ich würde mich da von der fachlichen Seite nähern. Hat ein Produkt immer eine Kombination mit Farbe?

Dann weißt Du zumindest, ob es immer geladen sein muss. Wie Du es dann mit Hibernate in der DB ablegst, kann unterschiedlich sein. Hast Du immer sehr viele Produkte an der Hand? Dann lohnt sich evtl. eine Big-Table. Hast Du eigentlich in einem Usecase immer nur eine paar wenige Produkte an der Hand lohnt sich eine Normalisierung.

Und natürlich hat letzteres auch Auswirkungen auf die Art der DB. Vielleicht ist eine Objekt-DB dann besser geeinigt.

Wie immer: It depends. :slight_smile: