Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有自定义where条件的自引用OneTONE_Java_Spring Boot_Hibernate_Jpa - Fatal编程技术网

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'。