java - PersistenceException - 当多个 @OneToMany 关系与同一实体时抛出 org.hibernate.exception.ConstraintViolationException

标签 java hibernate jpa corda

在我的应用程序中,当我在一个类中包含 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_idinvoiceComments_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/

相关文章:

java - 在基于 Spring MVC 的应用程序中,我应该何时何地从 hibernate 4.3.8.Final 获取新 session ?

java - Grails - 为什么需要 withTransaction?

spring - JPA Native 查询在 INSERT INTO VALUES 中将 List 参数的括号错误

java - 从自己的库实现 JPA

java - 通过套接字连接的多个 HTTP 请求

java - 从 fragment 中替换 fragment

java - 是否可以在 AnyLogic 中调用嵌入 block 的函数?

java - 如何使用 Hibernate for Java 将 CHAR(1) 映射到 boolean 值?

java - hibernate 中的一对多问题

java - 在 JPA 中,如何找到所有具有属性值的类型和具有属性值的 ManyTomany 相关实体?