使用自定义where条件自引用OneToOne

时间:2020-09-14 07:53:03

标签: java spring-boot hibernate jpa

有没有一种方法可以通过使用自定义选择和条件来自我引用实体?

假设我拥有这个实体:

@Entity
public class Contract {

    @Id
    private Long id;

    private String name;

    @OneToOne
    private Contract selfContract;

}

对于selfContract,我需要创建一个具有多个(小复数)的选择,其中条件基于contract实体本身的字段来获取正确的实体。在此示例中,字段name将是where条件。

我正在考虑将selfContract链接到dao类中的select语句,该语句在我需要selfContract时立即执行(惰性)。但实际上不确定这是否可能。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您将选择“外部”合同,其中name =“ some name”,然后从结果中获取selfContract。

如果要对其性能进行一些优化,则可以选择一个dto。

然后,您可以直接选择selfContract,外部合同名称=“某些名称”

示例:

    @Query("SELECT new ContractDTO(c.selfContract.id, c.selfContract.name) FROM Contract c WHERE c.name = :name")
    List<ContractDTO> retrieveSelfContractsByContractNameAsDTO(@Param("name") String name);