Java 具有自定义where条件的自引用OneTONE
是否有方法通过使用自定义的选择和位置条件来自引用实体 假设我有这个实体:Java 具有自定义where条件的自引用OneTONE,java,spring-boot,hibernate,jpa,Java,Spring Boot,Hibernate,Jpa,是否有方法通过使用自定义的选择和位置条件来自引用实体 假设我有这个实体: @Entity public class Contract { @Id private Long id; private String name; @OneToOne private Contract selfContract; } 对于selfContract我需要创建一个带有多个(有点复杂)where条件的select,以便在contract实体本身的字段中获得正确的实
@Entity
public class Contract {
@Id
private Long id;
private String name;
@OneToOne
private Contract selfContract;
}
对于selfContract
我需要创建一个带有多个(有点复杂)where条件的select,以便在contract
实体本身的字段中获得正确的实体。在本例中,name
字段将是一个包含条件的字段
我正在考虑将
selfContract
链接到dao类中的select语句,该语句在我需要selfContract
(lazy)时立即执行。但实际上不确定这是否可行。在这种情况下,您可以在“外部”契约上选择name=“some name”,然后从结果中获得selfContract
如果您想对其进行性能优化,那么您可以选择一个dto
然后您可以直接选择selfContract,其中外部contracts name=“some name”
例如:
@Query("SELECT new ContractDTO(c.selfContract.id, c.selfContract.name) FROM Contract c WHERE c.name = :name")
List<ContractDTO> retrieveSelfContractsByContractNameAsDTO(@Param("name") String name);
@Query(“从合同c中选择新合同(c.selfContract.id,c.selfContract.name),其中c.name=:name”)
列表检索selfContractsByContractNameAsdTo(@Param(“name”)字符串名);
当您定义实体之间的关系时,是因为它以前存在于DB中,我不太理解这个问题,因为合同总是引用selfContract。如果希望selfContract实体正确初始化,请对其进行提取,但由于您没有像Lazy那样的关系,因此您不需要它。@JLazar0关系存在,但仅取决于where条件。因此,在这个简单的示例中,关系可以是selfContract=where contract.name='Patrick'。