gpt4 book ai didi

java - 无法在 Oracle 中标准搜索匹配的映射列 (MapKeyColumn)

转载 作者:行者123 更新时间:2023-12-01 04:43:29 25 4
gpt4 key购买 nike

我有这个实体,并且想要查找具有相同属性集的任何实体。

@Entity
public class PropertyResource {

@ElementCollection
@MapKeyColumn(name = "property_key")
@Column(name = "property_value")
@CollectionTable(name = "resource_properties")
private Map<String, String> properties = Maps.newHashMap();

...
}

这是我使用条件生成器的实现:

public List<PropertyResource> findDuplicateProperties(PropertyResource resource) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<PropertyResource> query = builder.createQuery(PropertyResource.class);
Root<PropertyResource> resourceRoot = query.from(PropertyResource.class);
List<Predicate> clauses = Lists.newArrayList();
for (Entry<String, String> entry : resource.getProperties().entrySet()) {
MapJoin<PropertyResource, String, String> properties = resourceRoot.joinMap("properties", JoinType.INNER);
clauses.add(builder.and(builder.equal(properties.key(), entry.getKey()), builder.equal(properties.value(), entry.getValue())));
}
if (!resource.isNew()) {
clauses.add(builder.notEqual(resourceRoot.get("id"), resource.getID()));
}
clauses.add(builder.equal(resourceRoot.get("type"), resource.getType()));
return em.createQuery(query.where(clauses.toArray(new Predicate[clauses.size()]))).getResultList();
}

我正在对每个属性进行额外的连接。具有相同属性键的相同类型的属性和资源并不多。这在 h2 中效果很好,它会产生以下结果:

select ...
from resource_table propertyre0_
inner join resource_properties properties1_ on propertyre0_.entid=properties1_.PropertyResource_entid
inner join resource_properties properties2_ on propertyre0_.entid=properties2_.PropertyResource_entid
where properties1_.property_key=? and properties1_.property_value=?
and properties2_.property_key=? and properties2_.property_value=?
and propertyre0_.entid<>4 and propertyre0_.resource_type=?

对于 Oracle,我得到了这个:

select ...
from resource_table propertyre0_
where propertyre0_.entid<>230 and propertyre0_.resource_type=?

我的查询有什么问题吗?

OBS:差点忘了。 Hibernate 版本为 4.1.9.Final。

最佳答案

这是一个用户错误的情况(请更换用户)。我的问题是发送到 Oracle 案例的属性映射确实是空的。代码做了唯一正确的事情;它没有创建任何连接。

关于java - 无法在 Oracle 中标准搜索匹配的映射列 (MapKeyColumn),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169502/

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