如何使用 EmbeddedId 将关系标记为可选?

How to mark a relation optional using EmbeddedId?

我有一个实体应该加入另一个实体。此关系是可选的,并使用 EmbeddedId.

@ManyToOne
@JoinColumns({
    @JoinColumn(name = "CUST_NR", referencedColumnName = "CUST_NR", insertable = false, updatable = false),
    @JoinColumn(name = "BILL_NR", referencedColumnName = "BILL_NR", insertable = false, updatable = false)})
@ForeignKey(name = "none")
// Field is optional, so no need for a constraint
// Need to use deprecated annotation https://hibernate.atlassian.net/browse/HHH-8805
private Report report;

如果我查询没有相关报告的实体,它会失败

javax.persistence.EntityNotFoundException: Unable to find Report with id ReportPk@62675cdb

它适用于简单的 ID。我错过了什么?

一个可行的解决方法是使用 FetchType.LAZY。但我想尽量避免它。

JPA本身是不可能的。如果你想使用hibernate特定的注释,你可以使用NotFound注释。

@ManyToOne
@JoinColumns({
    @JoinColumn(name = "CUST_NR", referencedColumnName = "CUST_NR",
                insertable = false, updatable = false),
    @JoinColumn(name = "BILL_NR", referencedColumnName = "BILL_NR", 
                insertable = false, updatable = false)})
@ForeignKey(name = "none")
// Field is optional, so no need for a constraint
// Need to use deprecated annotation https://hibernate.atlassian.net/browse/HHH-8805
@NotFound(NotFoundAction.IGNORE)
private Report report;

看看@NotFound(NotFoundAction.IGNORE)