Hibernate Lazy Loading Interceptor Returning Null [geschlossen]Java

Java-Forum
Anonymous
 Hibernate Lazy Loading Interceptor Returning Null [geschlossen]

Post by Anonymous »

Ich habe die folgenden Einheiten: < /p>
class A {
@Id
String aId;
@OneToMany(fetch = FetchType.LAZY)
List bsOfA
@OneToMany(fetch = FetchType.LAZY)
List csOfA

public A(String id) {
this.aId = id;
}
}
class B {
@Id
String aId;
@Id
String bId;
@ManyToOne(fetch = FetchType.LAZY)
A aOfB;
@ManyToOne(fetch = FetchType.LAZY)
C cOfB // this is some member of csOfA

public B(String id, B sourceB) {
this.aId = id;
this.bId = sourceB.bId;
}
}
class C {
@Id
String aId;
@Id
String cId;
@OneToMany(fetch = FetchType.LAZY)
A aOfC;
@ManyToOne(fetch = FetchType.LAZY)
List linkedBsToC;
public C(String id, C sourceC) {
this.aId = id;
this.cId = sourceC.cId;
}
}
< /code>
Jetzt möchte ich eine Kopie von A erstellen, damit ich wie folgt fortschreite < /p>
A sourceA = aRepo.getbyId(sourceAId);
A copyA = new A(newAId);

List bsOfA = new ArrayList(sourceA.getBsOfA.size());
sourceA.getBsOfA().forEach(b -> bsOfA.add(new B(newAId, b));
copyA.setBsOfA(bsOfA)

List csOfA = new ArrayList(sourceA.getCsOfA.size());
// problematic part
sourceA.getCsOfA().forEach(c -> csOfA.add(new C(newAId, c));
copyA.setCsOfA(csOfA)
< /code>
Jetzt ist das Problem: Während dieser Kopieroperation beobachte ich, dass der Konstruktor von C ein Eingang C ein Hibernate_Interceptor -Objekt ist, das NULL -Attribute aufweist (wie in diesem anderen Beitrag: Daten innerhalb des Hibernate -Interceptor -Objekts, aber Null unter Entitätsvariablen - können nicht rauf. Auswahlmöglichkeiten: < /p>

Tauschen Sie die Position der Initialisierung der BSOFA und CSOFA von Copya aus: < /li>
< /ol>
List csOfA = new ArrayList(sourceA.getCsOfA.size());
sourceA.getCsOfA().forEach(c -> csOfA.add(new C(newAId, c));
copyA.setCsOfA(csOfA)

List bsOfA = new ArrayList(sourceA.getBsOfA.size());
sourceA.getBsOfA().forEach(b -> bsOfA.add(new B(newAId, b));
copyA.setBsOfA(bsOfA)
< /code>

Setzen Sie FetCetType.eager für cofb < /li>
Ändern Sie die Konstruktoren < /li>
< /ol>
public C(String id, C sourceC) {
this.aId = id;
this.cId = sourceC.getCId(); // How is this different from sourceC.id ?!
}
< /code>
Kann mich jemand bitte in diesem Problem aufklären? Ich werde mich auf jeden Fall für #3 entscheiden, weil es am einfachsten zu sein scheint, aber ich kann immer noch nicht herausfinden, was mit dem ursprünglichen Code los ist. Vielen Dank im Voraus :)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post