首页 > 解决方案 > hibernate 和 mysql 和 Operand 应该包含 2 列

问题描述

我有几个例外:

  1. 首先,org.hibernate.engine.jdbc.spi.SqlExceptionHelper- 操作数应包含 2 列
  2. 二、org.hibernate.exception.DataException:无法提取ResultSet

我的查询是这样

select *  from items 
where (appid, version) in (('abc', '123'), ('xyz', '456')

我的 JPA 存储库是这样

@Query(value = "select *  from items where (appid, version) in (:appIdVersionList)", nativeQuery = true)

List<Item> getItemList(@Param("appIdVersionList") String appIdVersionList);

如果我要这样做,没有例外:

@Query(value = "select *  from items where appid in (:appIdList) and version in (:versionList)", nativeQuery = true)
    
List<Item> getItems(@Param("appIdList") List<String> appIdList, @Param("versionList") List<String> versionList);

但是没有异常的查询可能会给我一个('abc', '456')我不想要的结果。

我需要做什么才能摆脱异常?

谢谢!

标签: mysqlhibernatejpa

解决方案


您必须列但只有一个参数。那永远行不通。

唯一可行的是:

@Query(value = "select * from items where (appid, version) in (:appid, :version)", nativeQuery = true)
List getItemList(String appid, String version);

否则,您必须将其拆分为两个 IN 条件。


推荐阅读