有没有一种方法可以通过使用自定义选择和条件来自我引用实体?
假设我拥有这个实体:
@Entity
public class Contract {
@Id
private Long id;
private String name;
@OneToOne
private Contract selfContract;
}
对于selfContract
,我需要创建一个具有多个(小复数)的选择,其中条件基于contract
实体本身的字段来获取正确的实体。在此示例中,字段name
将是where条件。
我正在考虑将selfContract
链接到dao类中的select语句,该语句在我需要selfContract
时立即执行(惰性)。但实际上不确定这是否可能。
答案 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);