JPA 2.0查询集合映射以与列表字符串

时间:2016-08-25 12:04:59

标签: java jpa-2.0

我正在尝试从联合集合中获取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证明是一项艰巨的任务。我找不到同一条船上的任何东西。

1 个答案:

答案 0 :(得分:-1)

检查你的查询,我认为这是错误的,你在没有ON的情况下使用JOIN。