【问题标题】:Spring-Data-Jpa: INNER JOIN with SubquerySpring-Data-Jpa:带有子查询的 INNER JOIN
【发布时间】:2018-10-24 14:27:19
【问题描述】:


我有以下问题。我想在我的 spring boot 项目中执行这个查询。我尝试使用 JPA 存储库接口中的查询注释来执行此操作。但它在内部连接处显示“意外选择”。当我直接在 mySQL 数据库上执行此查询时,它将起作用。

有人对此案有解决方案吗?

这是我的查询:

SELECT t1.*
FROM az_manager t1
INNER JOIN
(
    SELECT maID, MAX(datum) AS max_date
    FROM az_manager
    WHERE maID IN (7243, 1)
    GROUP BY maID
) t2
   ON t1.maID = t2.maID AND t1.datum = t2.max_date
WHERE
    t1.maID IN (7243, 1);

这是我的课:

@Entity
@Table(name = "az_manager")
@IdClass(TnsWorkingHoursManagerId.class)
@Getter
@Setter
public class TnsWorkingHoursManager extends TnsObject{

    @Id
    @Column(name = "datum")
    private long date;

    @Id
    @Column(name = "maid")
    private int employeeId;

    @Column(name = "typid")
    private int typeId;

    @Column(name = "bemerkung")
    private String comment;

    @Column(name = "host")
    private String host;

    @Column(name = "modus")
    private byte mode;

    public TnsWorkingHoursManager() {
    }

}

这是我对 JPA 存储库的尝试:

@Query(value = "SELECT azm1 FROM az_manager azm1 INNER JOIN (SELECT maID, MAX(datum) AS max_date FROM az_manager WHERE maID IN(:userIds) GROUP BY maID) azm2 ON azm1.maID = azm2.maID AND azm1.datum = azm2.max_date WHERE azm1.maID IN (:userIds)")
    List<TnsWorkingHoursManager> getLastEntries(@Param("userIds") ArrayList<Integer> userIds);

在第二次选择时显示“'SELECT' unexpected”

【问题讨论】:

  • 你能用映射展示你的java类吗?
  • 完成了,希望对你有帮助
  • I tried to do this with the query annotation in the JPA。然后显示它
  • 我添加了这个,谢谢提示

标签: java mysql hibernate jpa spring-data-jpa


【解决方案1】:

对于可能偶然发现这个问题的其他人:

如果您没有在 Spring Repository 中的 @Query 注解中添加 nativeQuery = true 参数,则该查询将被视为使用 JPQL 编写。

来自 JPQL docs:

子查询可以用在 WHERE 或 HAVING 子句中。

根据上面的引用,JPQL(Java Persistence Query Language)不支持 FROM 子句中的子查询,这就是为什么 OP 必须将查询设为原生才能使其工作。

【讨论】:

    【解决方案2】:

    我找到了解决办法。 我忘了在行尾添加“,nativeQuery = true”,但在括号中。现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 2019-02-28
      • 2017-01-24
      • 2019-06-27
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      相关资源
      最近更新 更多