Ich habe zwei Entitäten in meinem Projekt mit einer Viele-zu-viele-Beziehung zwischen ihnen. Die Relation wird mit Hilfe einer Helfer-Mapping-Tabelle in Postgres dargestellt, die die relevante ID für jede Entität enthält, ziemlich Standard.Hibernate verursacht Endlosschleife mit @ManyToMany bidirektionalen Beziehung
Nennen wir die Tabelle bucket_object_mapping
und es hat zwei Spalten: bucket_id
, object_id
.
Der Eimer Klasse:
@Entity
@Table(name = "bucket")
public class Bucket {
// Some fields omitted here
@ManyToMany(cascade = {}, fetch = FetchType.LAZY)
@JoinTable(
name = "bucket_object_mapping",
joinColumns = @JoinColumn(name = "bucket_id"),
inverseJoinColumns = @JoinColumn(name = "object_id")
)
private List<Model> models;
}
In der Model
Klasse I keine Zuordnung zur Bucket
Klasse (keine Notwendigkeit dafür)
Wenn ich laufen diese einfache Abfrage:
SELECT bucket FROM Bucket bucket WHERE bucket.customerId=:customerId
Die Daten werden zunächst gut zurückgegeben, aber dann eine Endlosschleife von Abfragen an die Model
Tabelle beginnt zu laufen und ich bin mir nicht sicher warum. Es sieht so aus, als wenn ich die Ergebnisliste über einen SpringMVC-Controller zurückgebe. Ich konvertiere die Bucket
zu einem DTO, aber nicht die Model
(Es ist nur, dass die Einheit keinen Verweis auf die Bucket
, so dass es nicht ein zirkuläres Referenzproblem sein soll).
Controller-Code:
@RequestMapping(value = "", method = RequestMethod.GET)
@ResponseBody
public List<BucketDTO> getAllByCustomer(@RequestParam(value = "customerid") final Long customerId) {
return bucketService.getAllBucketsForCustomer(customerId);
}
Der Code im Dienst:
@Transactional
public List<BucketDTO> getAllBucketsForCustomer(final Long customerId) {
List<Bucket> buckets = bucketDao.getBucketsForCustomer(customerId);
List<BucketDTO> result = bucketDtoConverter.toDtoList(buckets);
return result
}
Können Sie bitte Code für Ihren Controller posten? – LearningPhase
@LearningPhase - hat die Frage bearbeitet. Ich fügte auch die Service-Methode hinzu, die zwischen dem Controller und dem DAO überbrückt. – Avi
Zeigen Sie Model.class. Hast du eine Beziehung zu Bucket.class? – Victor1125