Java c解决方案现在,虽然它仍然会进行一些多余的连接(我只需要关联的id)和复制字段选择,但是如果我们将更多的内容扩展到不同的视图中,它就像一个很好的库,尽管现在通过JPA的PersistenceContext自动合并数据就足够了。 @EntityGraph(v

Java c解决方案现在,虽然它仍然会进行一些多余的连接(我只需要关联的id)和复制字段选择,但是如果我们将更多的内容扩展到不同的视图中,它就像一个很好的库,尽管现在通过JPA的PersistenceContext自动合并数据就足够了。 @EntityGraph(v,java,spring,hibernate,jpa,jpql,Java,Spring,Hibernate,Jpa,Jpql,c解决方案现在,虽然它仍然会进行一些多余的连接(我只需要关联的id)和复制字段选择,但是如果我们将更多的内容扩展到不同的视图中,它就像一个很好的库,尽管现在通过JPA的PersistenceContext自动合并数据就足够了。 @EntityGraph(value = "Subject.allJoins", type = EntityGraphType.FETCH) @Query("select s from Subject s" + FIND_QUERY_WHERE) Page


c解决方案现在,虽然它仍然会进行一些多余的连接(我只需要关联的id)和复制字段选择,但是如果我们将更多的内容扩展到不同的视图中,它就像一个很好的库,尽管现在通过JPA的PersistenceContext自动合并数据就足够了。
@EntityGraph(value = "Subject.allJoins", type = EntityGraphType.FETCH)
    @Query("select s from Subject s" + FIND_QUERY_WHERE)
    Page<Subject> findInProject(@Param("projectId") UUID projectId, <additional params>
select
    subject0_.id,
    <all kinds of fields including some duplicates>
from
    subject subject0_
    left outer join project project1_ on subject0_.project_id = project1_.id
    left outer join subject_property_value properties2_ on subject0_.id = properties2_.subject_id
    left outer join property_value propertyva3_ on properties2_.property_value_id = propertyva3_.id
    left outer join ingestion_id_mapping ingestedme4_ on subject0_.id = ingestedme4_.subject_id
where
    subject0_.project_id = '123'
order by
    subject0_.name asc
@EntityView(Subject.class)
public interface SubjectView {
    @IdMapping
    Integer getId();
    ProjectView getProject();
    @Mapping(fetch = SUBSELECT)
    Set<PropertyValueView> getProperties();
    Set<IngestionMappingView> getMappings();
}
@EntityView(Project.class)
public interface ProjectView {
    @IdMapping
    Integer getId();
    String getName();
}
@EntityView(PropertyValue.class)
public interface PropertyValueView {
    @IdMapping
    Integer getId();
    String getName();
}
@EntityView(IngestionMapping.class)
public interface IngestionMappingView {
    @IdMapping
    Integer getId();
    String getName();
}
@Repository
public interface SubjectRepository {
    Page<SubjectView> findByProjectId(@Param("projectId") UUID projectId, <additional params>);
}