JPA'Many2Many

来源:互联网 发布:电子书解压软件下载 编辑:程序博客网 时间:2024/05/17 06:06

Many2Many关系:
 Document(主动)<---->(被动)KMFile

 

class Document
主动关联设置:指定中间表,及字段。
 @ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST}, targetEntity=KMFile.class)
 @JoinTable(inverseJoinColumns={@JoinColumn(name="file_id")}, name="LINK_KMFile", joinColumns={@JoinColumn(name="linker_id")})
 public List<KMFile> getFiles() {
  return fileList;
 }

 

class KMFile
被动关联设置:只需设置mappedBy,即本体在主体中的属性(Document#getFiles)。
 @ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST}, mappedBy="files", targetEntity=Document.class)
 public List<Document> getDocuments() {
  return docList;
 }

  

使用示例:

Logger调为Fine,以输出SQL(本例使用derby),执行结果输出:

--INSERT INTO Document (ID, CREATETIME, LASTMODIFIED, TITLE, DESCRIPTION, OWNER_ID) VALUES (?, ?, ?, ?, ?, ?)
 bind => [4508551237913941891, null, null, AAA, null, null]
--INSERT INTO KMFile (ID, CREATETIME, NAME, TYPE, SIZE, LASTMODIFIED, TITLE) VALUES (?, ?, ?, ?, ?, ?, ?)
 bind => [4508551237913941892, null, null, 0, 0, null, BBB]
--INSERT INTO LINK_KMFile (file_id, linker_id) VALUES (?, ?)
 bind => [4508551237913941892, 4508551237913941891]


--SELECT ID, CREATETIME, LASTMODIFIED, TITLE, DESCRIPTION, OWNER_ID FROM Document WHERE (ID = CAST (? AS BIGINT ))
 bind => [4508551237913941891]
文档:AAA
文档-附件:BBB
--SELECT ID, CREATETIME, NAME, TYPE, SIZE, LASTMODIFIED, TITLE FROM KMFile WHERE (ID = CAST (? AS BIGINT ))
 bind => [4508551237913941892]
附件:BBB
附件-文档:AAA

 

Relationships: http://www.devx.com/Java/Article/33906/0/page/2

原创粉丝点击