我正在尝试从联合集合中获取Map值以与List String进行比较。我一直有例外。
这是我的查询,
public long countByTypeAndPropertyKeyWithValue(List<String> type, String key, List<String> value, Date fromTime, Date toTime) {
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createQuery("select count(o) from EbizEvent o JOIN o.properties p where o.type in :type and KEY(p)=:name and VALUE(p)= :val and o.timestamp between :fromTime and :toTime");
query.setParameter("type", type);
query.setParameter("name", key);
query.setParameter("val", value);
query.setParameter("fromTime", fromTime);
query.setParameter("toTime", toTime);
long count = (Long) query.getSingleResult();
return count;
}
EbizEvent表有一个属性表,它可以连接,
@ElementCollection( fetch = FetchType.EAGER)
@MapKeyColumn(name="KEY")
@Column(name="VALUE")
@CollectionTable(name="EBIZ_EVENT_PROPERTY", joinColumns=@JoinColumn(name="EVENT_ID"))
Map<String, String> properties = new HashMap<String, String>();
问题是,查询不断在Value区域获得异常,
如果我的val只是一个字符串,这是有效的。如果我使用List,它会出错。
VALUE(p)= :val
参数“参数('val')”在EbizEvent中的select count(o)中声明o JOIN o.properties p其中o.type in:type和KEY(p)=:name和VALUE(p)=: val和o.timestamp:fromTime和:toTime“设置为”[SGP]“的类型为”java.util.ArrayList“,但此参数绑定到”java.lang.String“类型的字段。
我也尝试过使用IN来处理非属性表,但仍然会抛出异常。
VALUE(p) IN :val
“遇到”VALUE(p)IN“在角色97,但预期:[”(“,”)“,”*“,”+“,” - “,”。“,”/“,”: “,”&lt;“,”&lt; =“,”&lt;&gt;“,”=“,”&gt;“,”&gt; =“,”?“,”ABS“,”全部“,”和“ ,“ANY”,“AS”,“ASC”,“AVG”,“BETWEEN”,“BOTH”,“BY”,“CASE”,“COALESCE”,“CONCAT”,“COUNT”,“CURRENT_DATE”,“ CURRENT_TIME“,”CURRENT_TIMESTAMP“,”DELETE“,”DESC“,”DISTINCT“,”ELSE“,”EMPTY“,”END“,”ESCAPE“,”EXISTS“,”FETCH“,”FROM“,”GROUP“ ,“HAVING”,“IN”,“INDEX”,“INNER”,“IS”,“JOIN”,“KEY”,“LEADING”,“LEFT”,“LENGTH”,“LIKE”,“LOCATE”,“ LOWER“,”MAX“,”MEMBER“,”MIN“,”MOD“,”NEW“,”NOT“,”NULL“,”NULLIF“,”OBJECT“,”OF“,”OR“,”ORDER“ ,“OUTER”,“SELECT”,“SET”,“SIZE”,“SOME”,“SQRT”,“SUBSTRING”,“SUM”,“THEN”,“TRAILING”,“TRIM”,“TYPE”,“ UPDATE“,”UPPER“,”VALUE“,”WHEN“,”WHERE“,,,,,,,,,]。”解析JPQL“从EbizEvent中选择count(o)o JOIN o.properties p其中o.type in:type和KEY(p)=:name和VALUE(p)in:val和o.timestamp:fromTime和:toTime ”。有关原始解析错误,请参阅嵌套堆栈跟踪。
我也试过:val member of VALUE(p)
,
这引发了同样的错误。
通过网络寻找任何JPA证明是一项艰巨的任务。我找不到同一条船上的任何东西。
答案 0 :(得分:-1)
检查你的查询,我认为这是错误的,你在没有ON的情况下使用JOIN。