2013-01-23 75 views
0

我想創建一個圍繞EJB/JPA鏈接到Mysql數據庫的小項目。 我有兩個表由外鍵鏈接的FctData和RefKpiDataQuery。OpenJPA插入不使用外鍵

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。 有人可以解釋我錯過了什麼?我找不到我的錯誤。

謝謝你的時間。 乾杯

+0

你試過設置'在多對一可選= FALSE' ? –

+0

如果RefKpiDataQuery存在,是否嘗試過使用em.find來查找它,而不是使用該pk值創建一個空的RefKpiDataQuery實例? – Chris

+0

對不起,延誤了。我終於通過刪除所有可選的= false來工作,沒有必要添加cascade.ALL也是。謝謝 –

回答

0

我終於得到它通過刪除所有

@Basic(optional = false) 

工作還沒有必要添加級聯= CascadeType.ALL