【问题标题】:Spring CrudRepository query with custom results带有自定义结果的 Spring CrudRepository 查询
【发布时间】:2018-03-06 10:50:52
【问题描述】:

我有一个要查询的表(员工)。结果将连接同一个表以在输出中的一行中从 Employee 获取 2 行。

+------+---------+------+
| name | manager | dept |
+------+---------+------+
| Zak  |         | xyz  |
| Arp  | Zak     | abc  |
| Tom  | Zak     | abc  |
| Smi  | Arp     | abc  |
| Moh  | Zak     | xyz  |
+------+---------+------+

我试图让每个经理的员工都有特定的选择(部门)

select t1.name, t2.name from TB t1
     RIGHT JOIN TB t2 on t1.name = t2.manager
    where t1.dept="xyz" AND t2.dept="abc"
    ORDER BY t1.name

结果会是这样的:

+------+------+------+
| name | name | dept |
+------+------+------+
| Zak  | Arp  | xyz  |
| Zak  | Tom  | abc  |
+------+------+------+

当我在春季尝试使用 CrudRepository 时,我需要为结果定义一个实体,但结果不是我的数据库中的表。而且我无法使用实体员工,因为结果有不同的列(或盟友) 我不确定如何在春季阅读这样的结果.. 有什么想法吗?

【问题讨论】:

    标签: mysql spring spring-boot spring-data-jpa


    【解决方案1】:

    你可以使用@Query注解。将以下方法放入 crud 存储库中。

    @Query("select t1.name, t2.name from TB t1 RIGHT JOIN TB t2 on t1.name = t2.manager where t1.dept="xyz" AND t2.dept="abc" ORDER BY t1.name", nativeQuery=true) 
     List<Object[]> find();
    

    【讨论】:

    • 我猜您必须在 DB 中有一个表表示对象实体,我收到此错误:{在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建 bean 时出错名称为“EmployeeController”:通过字段“EmployeeRepo”表达的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“EmployeeRepo”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object}
    • 我的错,应该是List&lt;Object[]&gt;,也编辑了原始答案。
    • 同样的错误:不是托管类型:类 [Ljava.lang.Object;
    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2016-09-11
    • 2016-09-17
    • 2017-10-15
    • 2021-08-28
    • 2015-02-02
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多