【发布时间】:2020-01-25 12:08:30
【问题描述】:
在我的应用程序中,当我在一个类中包含 2 个或多个相同实体(@OneToMany 关系)的列表时,我得到 org.hibernate.exception.ConstraintViolationException。
@Embeddable
data class DocPresentation(
@OneToMany(cascade = [CascadeType.ALL])
var billOfLadingComments: List<Comment>?,
@OneToMany(cascade = [CascadeType.ALL])
var invoiceComments: List<Comment>?,
...
@Entity
@Table(name = "Comment")
data class Comment(
@Column(name = "date")
var date: Date?,
@Column(name = "message")
var message: String?,
@Embedded
var sender: Company?
) {
constructor() : this(null, null, null)
@Id
@GeneratedValue
@Column(name = "database_id")
var databaseId: Int? = null
}
关系是单向的,因此会创建一个中间表来保存相关实体的 ID。在这种情况下,它包括 DocPresentation 的嵌入实体的 id,以及 2 个列:billOfLadingComments_database_id 和 invoiceComments_database_id。
当我评论其中一个列表时,应用程序可以正常工作。如何解决异常?
【问题讨论】:
-
你有没有试过通过JoinTable注解来配置这两个关系?看->stackoverflow.com/questions/5478328/jpa-jointable-annotation.
-
您是否使用一个通用的 JoinTable 进行 2 个 OneToMany 映射?
-
@oputyk 该帖子有帮助,由于您提供的链接,我已经解决了错误。请将评论发布为答案,以便我对其进行评分并标记为最佳答案。
-
@Martin'sRun,是的,我这样做了。现在我为每个列表使用不同的 JoinTables。感谢您的评论。