当前位置: 首页 > 知识库问答 >
问题:

Java JPA类型查询

彭宏阔
2023-03-14

我试图建立一个查询,但我得到一个错误,当我参数的id.我不明白为什么。

这是针对Java8Spring数据JPA1.11.23的。释放

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:45103错误DaoImpl:528-您试图设置java类类型的值。util。参数1的ArrayList应为java类的类型。从查询字符串中选择x,其中x.id在(?1)中。

java.lang.IllegalArgumentExcture:您试图设置类型类的值java.util.ArrayList的参数1与预期类型的类java.lang.长从查询字符串SELECT x从My_Entityx WHEREx.idIN(?1)。

在org.eclipse.persistence.internal.jpa.QueryImpl.set参数内部(QueryImpl.java:946)
在org.eclipse.persistence.internal.jpa.QueryImpl.set参数内部(QueryImpl.java:920)
在org.eclipse.persistence.internal.jpa.EJBQueryImpl.set参数(EJBQueryImpl.java:479)
org.eclipse.persistence.internal.jpa.EJBQueryImpl.set参数(EJBQueryImpl.java: 1)

共有1个答案

姚高韵
2023-03-14

该项目正在使用

   <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.7.8</version>
    </dependency>

看起来他们没有检查“IN”接线员

  protected void setParameterInternal(String name, Object value, boolean isIndex) {
    DatabaseQuery query = this.getDatabaseQueryInternal();
    if (query.getQueryMechanism().isJPQLCallQueryMechanism()) {
        int index = query.getArguments().indexOf(name);
        if (index == -1) {
            if (isIndex) {
                throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-argument-index", new Object[]{name, query.getEJBQLString()}));
            }

            throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-argument-name", new Object[]{name, query.getEJBQLString()}));
        }

        Class type = (Class)query.getArgumentTypes().get(index);
        if (!this.isValidActualParameter(value, type)) {
            throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-incorrect-parameter-type", new Object[]{name, value.getClass(), query.getArgumentTypes().get(index), query.getEJBQLString()}));
        }
    } else if (isIndex && name.equals("0")) {
        throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-argument-index", new Object[]{name, query.getSQLString()}));
    }

    this.parameterValues.put(name, value);
}

protected boolean isValidActualParameter(Object value, Class parameterType) {
    return value == null ? true : BasicTypeHelperImpl.getInstance().isAssignableFrom(parameterType, value.getClass());
}

我将避免使用setParameter方法。

 类似资料:
  • 我在JavaEE(泽西)与JPA的应用程序,我有一个问题与未初始化的实体。我有3个实体汽车,业主,房子,汽车可以有多个业主和业主可以有多个房子。当我返回(entityManager.find)汽车然后车主被初始化。当我返回房子然后业主初始化,但车不是。我希望能够调用House.getOwner(). getCar(). getId()。现在我必须打电话给House,然后打电话给Owner以获得Ca

  • Blockly完全支持JS和Python之类的动态类型的模型,并且还包括对C / C ++之类的静态类型的模型的支持,但需要做一些额外的工作。 在这两种情况下,Blockly都可以防止构造一些非理性的组合。以下三个模块之间没有业务联系: Blockly的每种连接类型(值输入/输出,下一个/上一个语句)都可以用类型信息标记,以便显然无效的连接将拒绝连接。这为用户提供了即时反馈,并避免了许多简单的错误

  • 本文向大家介绍Dapper.NET 查询动态类型,包括了Dapper.NET 查询动态类型的使用技巧和注意事项,需要的朋友参考一下 示例 如果不使用泛型类型,也可以动态查询。            

  • 本文向大家介绍Dapper.NET 查询静态类型,包括了Dapper.NET 查询静态类型的使用技巧和注意事项,需要的朋友参考一下 示例 对于在编译时已知的类型,请使用带有的通用参数Query<T>。            

  • 本文向大家介绍ActionScript 3 检查类型,包括了ActionScript 3 检查类型的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用is运算符来验证值是否为某种类型: 此外,还有一个instanceof操作者(不建议使用),其工作几乎相同is,除了它返回false对实现的接口时检查和INT / UINT类型。 该as运营商还可以通过使用就像is操作。如果您使用诸如Flash