【发布时间】:2015-06-05 13:03:23
【问题描述】:
需要你们的帮助。
我有表格请求,它与请求注释表格有一对多的关系。
所以我们有 request 表,一个名为 request_note 表和 notes 表的连接表。
请求表是这样注释的。
@Entity
@Table( name = "REQUEST" )
public class Request implements Serializable {
/**
Different other columns and below is request note table
**/
@OneToMany( cascade = CascadeType.ALL, mappedBy = "request" )
private List<RequestNote> requestNoteList;
}
接下来我有一个包含请求 id 和注释 id 表的连接表
@Entity
@Table( name = "REQUEST_NOTE" )
public class RequestNote implements Serializable {
@EmbeddedId
protected RequestNotePK requestNotePK;
@ManyToOne( optional = false, fetch = FetchType.LAZY )
private Request request;
@JoinColumn( name = "NOTE", referencedColumnName = "ID", insertable = false, updatable = false )
@ManyToOne( optional = false, fetch = FetchType.EAGER )
private Note note;
}
现在我自己有了 Notes 表,它是常规表。它有自己的@SequenceGenerator
@Entity
@Table( name = "NOTE" )
public class Note implements Serializable {
@Id
@NotNull
@GeneratedValue( generator = "NOTE_SEQ" )
@SequenceGenerator( name = "NOTE_SEQ", sequenceName = "NOTE_SEQ", allocationSize = 1 )
private String id;
@OneToMany( cascade = CascadeType.ALL, mappedBy = "note" )
private List<RequestNote> requestNoteList;
}
现在,用户可以从用户界面更改、添加或删除请求的注释。
当我从 UI 添加新注释时,我有以下代码。在这里,我已经有请求 ID,但必须生成 Notes id 并将其保存到联接表 (request_note) 表中,并且出现错误。
//Create New Note
Note newNote = new Note();
newNote = noteFromUI;
//something like that very common
//Creating new Request Note row
RequestNote newRequestNote = new RequestNote();
newRequestNote.setNote(noteFromUI);
newRequestNote.setRequest(getRequest());
RequestNotePK requestNotePK =
new RequestNotePK(getRequest().getId(), noteFromUI.getId());
newRequestNote.setRequestNotePK(requestNotePK);
getRequest().addRequestNoteList(newRequestNote);
我现在遇到的问题或错误是。
- 它创建 - INSERT INTO NOTE 正确序列 - 成功 - Id 600
- 现在它正在尝试运行 - INSERT INTO REQUEST_NOTE,因为我已经有了请求 ID,所以没有问题,但是新生成的 Note id - 在这种情况下为 600 没有分配给 REQUEST_NOTE 表。
我想这是常见问题,但我无法弄清楚我做错了什么。
如何让我的联接表 Request Note 表知道,它必须使用从 Note 表新创建的 id 到它的联接表。
【问题讨论】:
标签: jpa eclipselink