次のエンティティにOneToOne関係を設定しようとしています。イベント&計画。問題は、イベントのプランニングテーブルに何も入っていない(プラン作成のために)プランのテーブルに何も入っていないということです(更新版)Hibernate - OneToOneエラー
IDEで、私はブラウザから戻ってくるものを調べることができます。計画が新しいため、.idがnullです。
consoleには、event_idがNULLであるというエラーが表示されます(event_idはプラン・テーブルのFKです)。
イベント
@Entity
public class Event {
@Id
private Long id;
@OneToOne(mappedBy = "event", cascade = CascadeType.PERSIST)
private Plan plan;
//
計画
@Entity
public class Plan {
@Id
private Long id;
@OneToOne
@JoinColumn(name = "event_id", nullable = false)
private Event event
//
私は、既存のイベントを更新し、計画を作成する必要があるフォームを持っています。
私は、次のエラーがスローされるフォームを送信する場合:
ブラウザ:
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
コンソール
私はこのエラーの根拠があることであることを理解し""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)
event_id(これはテーブルプランにあります)はnullにはできませんが、プランはpとして送信されますイベントアップデートのアート - 正しく設定された関係の結果としてevent_idが得られるでしょうか?ここ
イベントサービス
Event savedEvent = eventRepository.save(event); // this line ok
return eventRepository.save(event); // this line errors as above
いただきましたの?
データアクセスコードが表示されていないと、この問題が発生した理由を知ることはできません。 –
オーナー側はmappedBy属性を持たない側です。これは、Hibernateが気にするものです。あなたは計画のイベントを設定することを確認する必要があります:計画。setEvent(...)。 –
ブラウザから戻ってくるオブジェクトはイベントであり、いくつかのテストデータとともに、すでにプランオブジェクトがアタッチされています。なぜ私は再びその関係を設定する必要がありますか? –