在我的应用程序中,当我在一个类中包含 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
。
当我评论其中一个列表时,应用程序可以正常工作。如何解决异常?
最佳答案
我是这样解决的。我使用 2 个连接列,因为嵌入实体中有 2 个 ID。
@ElementCollection
@CollectionTable(
name = "docs_presentation_bill_of_lading_hashes",
joinColumns = [
JoinColumn(name = "transaction_id", referencedColumnName = "transaction_id"),
JoinColumn(name = "output_index", referencedColumnName = "output_index")
]
)
@Column(name = "bill_of_lading_hash")
var billOfLading: List<String>? = null,
@OneToMany(cascade = [CascadeType.ALL])
@JoinTable(
name = "doc_presentation_bill_of_lading_comments",
inverseJoinColumns = [
JoinColumn(name = "bill_of_lading_comment_id", referencedColumnName = "database_id")
]
)
var billOfLadingComments: List<Comment>? = null,
关于java - PersistenceException - 当多个 @OneToMany 关系与同一实体时抛出 org.hibernate.exception.ConstraintViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58096020/