我认为原因在于关系中的错误描述,所以我会尝试解释它。 我有5张桌子。 3个实体表和两个连接表:
文章,分支,照片,article_photo,branch_photo
现在表之间的关系:
分支和文章之间的
@OneToMany(mappedBy="branch", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@ManyToOne(optional = false)
@JoinColumn(name = "branch_id", referencedColumnName = "id")
分支和照片之间的与连接表branch_photo:
@OneToMany(fetch = FetchType.EAGER , cascade = CascadeType.ALL)
@JoinTable(name = "branch_photo", joinColumns = @JoinColumn(name = "branch_id"), inverseJoinColumns = @JoinColumn(name = "photo_id"))
文章和照片之间的与联接表article_photo:
@OneToMany(fetch = FetchType.EAGER , cascade = CascadeType.ALL)
@JoinTable(name="article_photo",
joinColumns=@JoinColumn(name="article_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="photo_id", referencedColumnName="id"))
因此,当我尝试在没有文章和照片之间的最后关系的情况下保持分支时,它正在工作但是如果关系存在则会抛出超时异常:
javax.el.ELException: javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
Error Code: 1205
Call: INSERT INTO photo (blobkey, blobthumb) VALUES (?, ?)
bind => [null, null]
Query: InsertObjectQuery(Photo [id=0])
问题是为什么写入照片表的交易无法完成?为什么可能有其他交易试图在桌面照片中写,但照片是用于文章? (我不为文章创建任何文章或任何照片,但只为分支创建照片)如何描述这些表之间的关系,以便没有锁定? 谢谢!