【发布时间】:2021-07-19 21:30:58
【问题描述】:
我正在尝试构建一个查询,但是当我为 id 提供参数时出现错误。我不明白为什么。
这适用于 Java 8 + spring-data-jpa 1.11.23.RELEASE
public List<E> findByIds(List<Long> ids) throws Exception {
try {
TypedQuery typedQuery = entityManager.createQuery(String.format("SELECT x FROM %s x WHERE x.id IN (?1)",domainClass.getSimpleName()),domainClass.getClass());
typedQuery.setParameter(1, ids);
return typedQuery.getResultList();
} catch (Exception e) {
logger.error(e.getMessage(),e);
throw e;
}
}
@MappedSuperclass
@EntityListeners(value = AbstractEntityListener.class)
public abstract class AbstractEntity implements Serializable, Persistable<Long>
{
@Id
@TableGenerator(name = "TABLE_GEN", table = "id_sequence", pkColumnName = "seq_name", valueColumnName = "seq_count", pkColumnValue = "Entity")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
@Basic(optional = false)
@Column(name = "id")
private Long id;
...
错误
16:02:45,103 错误 DaoImpl:528 - 您尝试为参数 1 设置类型为 java.util.ArrayList 的值,预期类型为 java.lang.Long 从查询字符串 SELECT x FROM MyEntity x WHERE x.id IN (?1)。
java.lang.IllegalArgumentException:您尝试为参数 1 设置类型为 java.util.ArrayList 的值,预期类型为 java.lang.Long 从查询字符串 SELECT x FROM My_Entity x WHERE x.id IN (?1).
在 org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:946)
在 org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:920)
在 org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:479)
在 org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:1)
【问题讨论】: