为什么静态数组不适用于 JPA?

开发商152
@Service
public class Executor {

    @Autowired
    private EntityManager entityManager;

    @Transactional
    public void deleteRows(Long[] ids, String table) {
 
            entityManager.createNativeQuery("update " + table + "  set flag =0 where id in ?1 ")
                    .setParameter(1, ids).executeUpdate();
}
}

标志字段是布尔值。

当调用方法 deleteRows([1,2,3],"test_table");

我无法理解的堆栈异常

Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'x'ACED0005757200115B4C6A6176612E6C616E672E4C6F6E673B7DE10AB2BBBC632B020000787000' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-3.4.5.jar:na]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
左撇子

IN 子句中的参数必须是非Collection数组。因此,您必须将数组转换为先将其List设置为查询的参数。另请注意,根据您的 Hibernate 版本,您可能需要将 IN 子句括在括号“(”、“)”中,例如where id in (?1)

@Transactional
public void deleteRows(Long[] ids, String table) {
     List<Long> idsList = Arrays.asList(ids);
     entityManager.createNativeQuery("update " + table + "  set flag =0 where id in ?1 ").setParameter(1, idsList ).executeUpdate();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Data JPA不适用于自动配置的entityManagerFactory

存储库注释不适用于Spring数据JPA

@EnableJpaRepositories不适用于JPA数据存储库

JPA孤立删除不适用于OneToOne关系

JPA @Version合并行为不适用于EclipseLink

JPA CascadeType Persist不适用于spring数据

Spring JPA Projection 不适用于 UUID 类型?

Spring Data(JPA)不适用于日期吗?

OrderBy 不适用于 Spring Data JPA 中的 In 子句

为什么 SetWindowRgn 不适用于静态控件?

为什么通用引用不适用于数组?

为什么“ a或b或c”不适用于NumPy数组?

为什么相等检查不适用于数组

为什么每个循环不适用于JSON数组

为什么数组公式不适用于整个列?

Spring Boot中的DB2自动增量主键列不适用于JPA实体

Spring Data Jpa 查询生成:`IgnoreCase` 不适用于`exists`

@Valid对象图验证不适用于JPA和TraversableResolver

Spring Data JPA不适用于事务隔离“ READ_UNCOMMITTED”

IS NULL检查不适用于JPA SQL查询中的列表

Spring JPA:查询注释字段选择不适用于 Mongo 查询

JPA @Column不适用于具有特殊字符的列名称

JPA,Hibernate验证程序-电子邮件验证程序不适用于String

Spring Boot:属性 spring.jpa.show-sql 不适用于数据存储

Spring Data JPA SELECT ... FOR UPDATE查询不适用于@query

JPA @Query具有“当存在时的情况”不适用于Hibernate

从 DATE 到 java.time.LocalDate 的 JPA 转换器不适用于 Glassfish 4.1

Spring Data JPA-PagingAndSortingRepository和Querydsl谓词不适用于findByAttribute

Spring WebFlow:持久性上下文不适用于Spring Data JPA / Hibernate