[Java] Spring @Query-Annotation vom weiteren Selects hindern

cppnap

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
487
Guten Tag liebe Leute,

etwas dumme Headline aber mir ist nix Besseres eingefallen^^

Folgendes Problem habe ich. Ich habe eine Verknüpfungstabelle ProductPerSubscription mit der methode findAll().

Diese Standard-Methode aus dem Repository habe ich wie folgt überschrieben:

Code:
    @Override
    @Query("SELECT ps FROM ProductPerSubscription ps JOIN FETCH ps.subscription AS s JOIN FETCH ps.product AS p")
    public List<ProductPerSubscription> findAll();


Mein Problem ist jetzt Das, dass auf dem Subscription-Entity weitere Entities verlinkt sind wie z.b. Customer.

In der Subscription-Entity ist der Customer wie folgt eingebaut:

Code:
public class Subscription {
    @OneToOne
    private Customer customer;
    
    ...
    ...
}

Un der Console zeigt er mir quasi 1000de Selects an wo er versucht die Customer für die Subscriptions aufzulösen. Das will ich aber nicht! Mich interessiert der Customer bei dieser Abfrage genau 0 und meine Frage ist nun ganz einfach, wie sage ich Spring, dass er mir wirklich nur die Subscription-Infos geben soll und den Customer nicht auflöst?

Vielen Dank schonmal :-)
 
In Spring bin ich mir nicht sicher, aber in Java EE würde dir die Annotation
@OneToOne(fetch = FetchType.LAZY) helfen bzw den Select erst auf customer machen wenn er zur Laufzeit benötigt wird.

Bin mit aber gerade nicht sicher ob ich dein Anliegen richtig verstanden habe.

Also wenn es 1 zu 1 muss der Provider auch das "Gegenstück" ansprechen damit die Integritäten gewahrt bleiben.
 
Zuletzt bearbeitet:
Ich rate jetzt Mal, dass Du Spring Data JPA einsetzt und die Annotation @OneToOne aus JPA kommt. In diesem Fall hat Pille1002 Recht und man kann es über den FetchType definieren. Das Ändern mag aber ggf. existierenden Code brechen, der auf dem Default-Value (EAGER) für @OneToOne vertraut.
 
Zurück
Oben