Java 从Spring数据中的多个表中选择

Java 从Spring数据中的多个表中选择,java,spring,hql,spring-data,spring-data-jpa,Java,Spring,Hql,Spring Data,Spring Data Jpa,我需要编写一个select查询,从Spring数据存储库层的多个表中获取数据。我知道我们可以使用@Query来编写自定义查询,但这只能从单个表返回值吗 SELECT s.service_id, s.name, us.rating_id FROM services s, ratings r, user_services us where us.service_id = s.service_id and us.rating_id = r.rating_id

我需要编写一个select查询,从Spring数据存储库层的多个表中获取数据。我知道我们可以使用@Query来编写自定义查询,但这只能从单个表返回值吗

SELECT s.service_id, s.name, us.rating_id 
FROM services s, 
     ratings r, 
     user_services us
where 
    us.service_id = s.service_id and
    us.rating_id = r.rating_id and
    us.user_id= ?;

接口方法可以使用本机SQL从多个表中选择列,该方法将返回对象数组列表:

public interface MyRepository extends JpaRepository {
  @Query(name = [name], nativeQuery = true)
  List<Object[]> methodThatQueriesMultipleTables();
}
公共接口MyRepository扩展了JpaRepository{
@查询(name=[name],nativeQuery=true)
列出查询MultipleTables()的方法;
}
列表中的每一项都是一行数据的对象数组

您还可以创建自定义存储库实现:

@NoRepositoryBean
公共接口自定义存储库{
列出查询MultipleTables()的方法;
}

公共类MyRepositoryImpl实现CustomRepository我想我选的问题的选定答案()显示了你要找的确切情况。@Nathanhes我的问题不是关于JPQL,而是关于如何将JPQL合并到Spring数据响应中,我尝试了souser的第一种方法,但我看起来很像。重新开放。如果你能找到一种方法来改写这个问题,使它更清楚,这可能会有帮助。我仍然不明白链接的问题是如何不够的。@NathanHughes我在问题中提到了SpringData,标题也相应地加了标签。你的链接在任何地方都没有提到spring数据。苏瑟的回答帮助了我,无论如何,我会接受的。请随意编辑我的问题,如果你认为它应该进一步澄清。谢谢。既然你提到了它,链接并没有提到spring数据。您应该能够在@Query中使用JPQL,并让spring数据接口上的方法返回由select new填充的dto列表。对于第一种方法,我得到的原因是:
org.springframework.beans.factory.BeanCreationException:创建名为“individualProviderServicesRepository”的bean时出错:调用init方法失败;嵌套异常是java.lang.IllegalArgumentException:不是托管类型:class java.lang.Object
第二种方法在使用了一段时间后仍然有效。谢谢。不看代码很难理解,但我很高兴您能解决您的问题。您知道我如何使用这种方法将其直接映射到实体吗?如果返回的结果集来自单个表,那么在跨表联接时是否可能出现这种情况。
@NoRepositoryBean
public interface CustomRepository<[Your object]> {
    List<Object[]> methodThatQueriesMultipleTables();
}

public class MyRepositoryImpl<[Your object]> implements CustomRepository<[Your object] {
    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public List<Object[]> methodThatQueriesMultipleTables() {
        //use JPA query to select columns from different tables
        Query nativeQuery = entityManager.createNativeQuery("query");
        return query.getResultList();
    }
}