gpt4 book ai didi

java - 使用 Hibernate Criteria 过滤 Map 中的键和值

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:23 26 4
gpt4 key购买 nike

我有以下持久类:

public class Code {

@ElementCollection(targetClass = CodeValue.class)
@MapKeyClass(CodeProperty.class)
@JoinTable(name="code_properties")
@CreateIfNull( value = false )
private Map<CodeProperty,CodeValue> propertiesMap =
new HashMap<CodeProperty, CodeValue>();

...
}

public class CodeProperty {
private String name;
...
}

public class CodeValue {
private String value;
...
}

我正在尝试获取根据我在 propertiesMap 中的某些属性过滤的代码列表(例如,名为“color”的属性值为“green”的代码)。

我使用以下基本标准:

Criteria criteria = currentSession()
.createCriteria(Code.class, "code")
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

当我尝试执行收集过滤器时(按照建议 here ):

criteria.createAlias("code.properties", "p");
criteria.add(Restrictions.eq("p.foo", "test1"));
criteria.setFetchMode("code.properties", FetchMode.JOIN);
criteria.list();

我收到以下错误:

org.hibernate.QueryException: could not resolve property: foo of: com.example.CodeValue

这意味着,我真的不明白为什么 hibernate 认为 code.propertiesCodeValue 而不是 ma​​p !!!

我还尝试在不创建别名的情况下访问该字段,这样 hibernate 似乎可以访问正确的 Code 类。我使用了 properties.indeces(按照建议 here ):

criteria.add(Restrictions.eq("properties.indeces", "foo"));
criteria.list();

但是我得到以下错误:

could not resolve property: properties.indeces of: com.example.Code

谁能帮我弄明白哪里出了问题?查找绿色代码的正确条件查询是什么?

您可以结帐the Github project that demonstrates this problem .

谢谢

最佳答案

请确认您是否使用了索引或索引。正确的用法如下:

criteria.createAlias("code.properties", "p");
criteria.add(Restrictions.eq("p.indices", "foo"));
criteria.list();

或者,您可以使用

eq("p." + CollectionPropertyNames.COLLECTION_INDICES)  

在限制中。

如果它仍然不适合您,请告诉我。

关于java - 使用 Hibernate Criteria 过滤 Map 中的键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com