2017-04-25 6 views
1

I User-Klasse haben, die einige zusätzliche Attribute:@ManyToMany und Aktualisierung Einheit

@Entity 
@Table(name="\"user\"") 
public class User implements UserDetails { 
    private String username; 
    private String password; 
    @ManyToMany(fetch = FetchType.EAGER) 
    private Collection<House> houses; 
} 

Nun, wenn ich rufe eine Methode, die einem der Häuser verändert (zum Beispiel seinen Namen Eigenschaft ändert), habe ich noch Holen Sie sich den alten Wert des Hauses, wenn ich anrufe:

User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
user.getHouses(); <- value of name property in house is not updated 

Wie kann ich sicherstellen, dass es immer aktualisiert wird?

+0

Ich denke nicht, dass es eine gute Idee ist, veränderbare Wert in Sicherheitskontext zu speichern. Wenn Sie jedoch darauf bestehen und Sie Hibernate verwenden, können Sie den Cache der zweiten Ebene durchsuchen. (nur ein Vorschlag, ich habe diesen Cache vorher nicht aktiviert). – PWC

Antwort

0

Ich würde vorschlagen, dass Sie @ManyToMany(fetch = FetchType.EAGER) zu @ManyToMany(fetch = FetchType.LAZY) ändern. Da EAGER das Objekt sofort beim ersten Aufruf aufruft und Sie mit LAZY die ID haben, holen Sie nach Bedarf, dh mit faul erhalten Sie aus der Datenbank den letzten Zustand Ihres Objekts.

0

Sie vermissen ein paar Details, auf der Grundlage Ihrer angegebenen Informationen:

Die Cascade fehlt, gibt es alle Arten von Kaskadentypen, für die Einfachheit nehmen wir an, dass Sie jede Änderung auf Ihrem Benutzer gemacht wollen Unternehmen führen auf der verbundene Einrichtung beeinflussen das Haus ist, so dass Sie Cascade.all

Was ist mit Ihrer @JoinTable und @JoinCoumn hinzufügen müssen? Es definiert auch nicht in Ihrer Entitäten Beziehung.

Verwandte Themen