我试图建立一个查询,但我得到一个错误,当我参数的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)
该项目正在使用
<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