Ich versuche, eine OneToOne Beziehung auf den folgenden Entitäten einzurichten Ereignis & Plan. Das Problem ist, dass, wenn ich (das ist ein Update) auf Ereignis geht nichts geht in die Plan-Tabelle (für Plan erstellen)Hibernate - OneToOne Fehler
In der IDE kann ich überprüfen, was aus dem Browser zurückkommt und es gibt einen Wert in Plan - obwohl planen .id ist null, da der Plan neu ist.
Die Konsole zeigt einen Fehler an, dass event_id null ist (event_id ist die FK in der Plantabelle).
Ereignis
@Entity
public class Event {
@Id
private Long id;
@OneToOne(mappedBy = "event", cascade = CascadeType.PERSIST)
private Plan plan;
//
-Plan
@Entity
public class Plan {
@Id
private Long id;
@OneToOne
@JoinColumn(name = "event_id", nullable = false)
private Event event
//
ich eine Form haben, die ein vorhandenes Ereignis aktualisiert und braucht einen Plan zu erstellen.
Als ich senden Sie das Formular der folgende Fehler ausgelöst wird:
Browser:
There was an unexpected error (type=Internal Server Error, status=500).
could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
Konsole
""2017-05-16 19:16:34 - Column 'event_id' cannot be null
""2017-05-16 19:16:34 - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
"com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'event_id' cannot be null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
Ich verstehe, dass die Grundlage dieses Fehlers ist, dass event_id (das im Tabellenplan steht) darf nicht null sein - aber der Plan wird als p übergeben Art eines Ereignisupdates - also sollte event_id als Ergebnis einer korrekt eingerichteten Beziehung erhalten werden?
Event Service
Event savedEvent = eventRepository.save(event); // this line ok
return eventRepository.save(event); // this line errors as above
Was stimmt hier nicht?
Ohne den Datenzugriffscode zu sehen, ist es unmöglich zu sagen, warum Sie dieses Problem haben. –
Die Eigentümerseite ist die Seite, die das Attribut mappedBy nicht aufweist. Es ist der, um den sich Hibernate kümmert. Sie müssen sicherstellen, dass das Ereignis des Plans festgelegt wird: planen.setEvent (...). –
Das Objekt, das vom Browser zurückkommt, ist ein Ereignis und es ist bereits ein Planobjekt mit einigen Testdaten angefügt. Warum muss ich diese Beziehung erneut festlegen? –