2014-09-22 16 views
1

這裏是實體片段....... Ignore DaoObject ..它只是將自動生成的Id添加到它所屬的每個實體中。播放2.3.4 Java - JPA oneToMany不保存外鍵。請檢查哪裏出錯

我已經突出顯示了哪些內容需要保留。最終,它無法爲流表中的contentid列添加值。這雖然增加了一行內容和下面的代碼流表..

請檢查和幫助我解決問題

  Content newContent = TestHelper.contentFactory(null, "streamForCREATE_IT", xxxx, 100); 
      Stream stream = TestHelper.streamFactory(null, "name", "appname",); 
      **stream.setContent(newContent); 
      List<Stream> streams = new ArrayList<Stream>(); 
      streams.add(stream); 
      newContent.setStreams(streams);** 


@Entity 
public class Content extends DaoObject { 
    public Content() { 
    }; 

    private String name; 
    private ContentType type; 
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "content", cascade = {CascadeType.PERSIST,CascadeType.MERGE}, orphanRemoval = true) 
    @JsonManagedReference 
    private List<Stream> streams = new ArrayList<Stream>(); 
    public String getName() { 
    return name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
    public List<Stream> getStreams() { 
    return streams; 
    } 
    public void setStreams(List<Stream> streams) { 
    this.streams = streams; 
    } 
    public void addStream(Stream newStream) { 
    if (streams == null) { 
     streams = new ArrayList<Stream>(); 
    } 
    newStream.setContent(this); 
    streams.add(newStream); 
    } 
} 

@Entity 
public class Stream extends DaoObject { 
    public Stream() { 
    } 
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinColumn(name = "contentid") 
    @JsonBackReference 
    private Content content;** 
    private String name; 
    private String appName; 
    public Content getContent() { 
    return content; 
    } 
    public void setContent(Content content) { 
    this.content = content; 
    } 
    public String getName() { 
    return name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
    public String getAppName() { 
    return appName; 
    } 
    public void setAppName(String appName) { 
    this.appName = appName; 
    } 
} 

下面是MySQL工作臺的形象。

enter image description here

+0

您沒有顯示如何/持續。 – 2014-09-22 14:38:05

+0

@AndreiI我添加了截圖供參考。請注意,上面添加的代碼中的實體沒有冗餘列 – 2014-09-22 15:17:33

+0

我的意思是:在某處您調用JPA.em()然後「persist」。你能告訴我們那個部分嗎? – 2014-09-22 15:21:42

回答

0

該死的是愚蠢的。我正在測試REST API,並且確實爲內容和每個流的內容設置了流,但這些都是在JSON轉換之前發生的。當這個關聯在dao中重新創建時,它就起作用了。感謝@AndreiI提出了正確的問題,幫助我解決了這個問題。