spring-data-jpa 不使用ID字段的链接数据JPA / Hibernate实体

6ovsh4lw  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(287)

我想链接2个实体,但使用的列不是主键(并且在类文件中未标记为@Id)。

@Entity
class MediaLog(
    @Id
    var id: UUID = UUID.randomUUID()
    var caseSystemId: String,
    var articleSummary: String?,
    var totalArticleCount: Int,
    var resolvedAt: Instant? = null,
    var lastCheckPerformedAt: Instant? = null
)

@Entity
@Audited
class CustomerCase(
    @Id
    var id: UUID = UUID.randomUUID()
    var authAccountId: UUID,
    @Enumerated(EnumType.STRING)
    var status: CaseStatus,
    var caseSystemId: String? = null
)

关系为一对一,应使用caseSystemId链接它们。MediaLog必须有有效的CustomerCase才能链接到它,但可能存在某些CustomerCase没有任何MediaLog条目的情况。是的,当CustomerCase被审核时,MediaLog未被审核(但这不是问题)。
我已经尝试了所有可能的组合,使用@OneToOne和@JoinColumn,并尝试了每个注解的属性,但无法使其工作。有什么想法吗?

uplii1fm

uplii1fm1#

我不知道您到目前为止尝试了哪些方法,但以下方法应该可以正常工作:

@Entity
class MediaLog(
    @Id
    var id: UUID = UUID.randomUUID()
    @OneToOne
    @JoinColumn(name = "caseSystemId", referenceColumnName = "caseSystemId")
    var customerCase: CustomerCase,
    var articleSummary: String?,
    var totalArticleCount: Int,
    var resolvedAt: Instant? = null,
    var lastCheckPerformedAt: Instant? = null
)

@Entity
@Audited
class CustomerCase(
    @Id
    var id: UUID = UUID.randomUUID()
    var authAccountId: UUID,
    @Enumerated(EnumType.STRING)
    var status: CaseStatus,
    @Column(name = "caseSystemId", unique = true)
    var caseSystemId: String? = null
)

相关问题