由于两个OneToMany关系到同一个表,因此在JPA中超过了锁定等待超时

时间:2014-08-14 20:22:36

标签: jpa

我认为原因在于关系中的错误描述,所以我会尝试解释它。 我有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])

问题是为什么写入照片表的交易无法完成?为什么可能有其他交易试图在桌面照片中写,但照片是用于文章? (我不为文章创建任何文章或任何照片,但只为分支创建照片)如何描述这些表之间的关系,以便没有锁定? 谢谢!

0 个答案:

没有答案