0

MysqlデータベースにリンクされたEJB/JPAの周りに小さなプロジェクトを作成しようとしています。外部キーによってリンクされた2つのテーブルFctDataとRefKpiDataQueryを取得しました。

FctData:

public class FctData implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "DATA_ID")
    private Long dataId;

    ...

    @JoinColumn(name = "DATA_QUERY_REF", referencedColumnName = "KPI_DATA_QUERY_ID")
    @ManyToOne(cascade = CascadeType.ALL)
    private RefKpiDataQuery dataQueryRef;

RefKpiDataQuery:

public class RefKpiDataQuery implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "KPI_DATA_QUERY_ID")
    private Long kpiDataQueryId;

    ...

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "dataQueryRef")
    private Set<FctData> fctDataSet;

データベースにFctDataを挿入しようとしているクライアントを取得しました

RefKpiDataQuery refKpiDataQuery = new RefKpiDataQuery();
refKpiDataQuery.setKpiDataQueryId((long) 2);

FctData fctData = new FctData();
fctData.setDataQueryRef(refKpiDataQuery);

fctDataFacade.insert(fctData);

ファサードは一種のDAOです。このことは、FKを持たないオブジェクトでうまく機能しています。

これが私のログに表示されるエラーです:

Field 'DATA_QUERY_REF' doesn't have a default value {prepstmnt 7235700 INSERT INTO FCT_DATA(DATA_DATE, DATA_TIME, DATA_VALIDITY, DATA_VALUE, ISACTIVE, UPDATE_OWNER, UPDATE_TS) VALUES (?, ?, ?, ?, ?, ?, ?)

私の挿入物で見ることができるように、それはdataQueryについて決して話しません。誰かが私に何を逃したのか説明できますか?間違いが見つかりません。

御時間ありがとうございます。乾杯

4

1 に答える 1

0

私はついにすべてを削除することでそれを機能させました

@Basic(optional = false)

また、cascade = CascadeType.ALL を追加する必要はありません。

于 2013-03-26T10:49:14.040 に答える