ich nächste Fehler haben: nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.Model.entities, could not initialize proxy - no Session
Hibernate: LazyInitializationException: Fehler beim Initialisieren einer Sammlung von Rollen. Konnte nicht Proxy initialisieren - keine Session
Meine Model
Einheit:
class Model {
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "model", orphanRemoval = true)
@Cascade(CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
public Set<Entity> getEntities() {
return entities;
}
public void addEntity(Entity entity) {
entity.setModel(this);
entities.add(entity);
}
}
Und ich habe eine Service-Klasse:
@Service
@Transactional
class ServiceImpl implements Service {
@Override
public void process(Model model) {
...
model.addEntity(createEntity());
...
}
}
ich Dienst habe Aufruf von eine andere Service-Methode:
@Override
@JmsListener(destination = "listener")
public void handle(final Message message) throws Exception {
Model model = modelService.getById(message.getModelId());
serviceImpl.process(model);
modelService.update(model);
}
Aber wenn ich versuche, diese Methode aufzurufen, bekomme ich Ausnahme in Zeile entities.add(entity);
auch die gleiche Ausnahme tritt auf, wenn ich getEntities()
auf model
aufrufen. Ich habe den Transaktionsmanager überprüft und er ist korrekt konfiguriert und die Transaktion ist in diesem Schritt vorhanden. Auch ich habe tonnenweise Antworten auf stackoverflow geprüft, die mit dieser Ausnahme verbunden sind, aber nichts nützliches.
Was könnte die Ursache dafür sein?
Wenn Sie sagen "_transaction exists on this step_" bedeutet das, dass Sie überprüft haben, dass eine Transaktion wirklich offen ist, wie zum Beispiel http://stackoverflow.com/a/42584751/3517383? – gabrielgiussi
@gabrielgiussi ja –
Ist Entität ein neues Objekt? Wenn dies der Fall ist, müssen Sie das Entitätsobjekt zuerst in der Datenbank speichern und dann in der Liste der Entitäten hinzufügen. – Dimitri