我有A类,它有一些原始属性,也是B类成员。 B型有一张地图:
//将名称映射到数字
private Map<String, Double> myMap = null;
@ElementCollection(fetch=FetchType.EAGER)
@MapKeyColumn(name = "NAME")
@Column(name = "NUMBER")
@CollectionTable(name = "NAME_MAPPING", uniqueConstraints = { @UniqueConstraint(columnNames = { "NAME", "NUMBER" }) })
public Map<String, Double> getMyMap()
{
return this.myMap;
}
A的片段:
private String name = null;
private B b = null;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "B_FK")
public B getB()
{
return b;
}
现在我想通过实例找到A.我定义了以下内容:
public List<A> findByExample(A a)
{
Session session = getSession();
Criteria criteria = session.createCriteria(A.class);
Example example = Example.create(a);
Criteria bCriteria = criteria.createCriteria("b");
B b = material.getB();
bCriteria.add(Example.create(b));
criteria = criteria.add(example);
criteria = criteria.setFetchMode("b", FetchMode.JOIN);
return criteria.list();
}
我尝试了各种各样的变化但没有成功。该方法返回具有相同A.name的所有DB条目,并忽略B中Map的相等性。
关于我做错了什么的任何线索?
谢谢, RONEN。
答案 0 :(得分:0)
示例限制忽略关联(尽管这不是文档,元素集合)。即使您只使用Criteria API(不使用Example),元素集合也不能成为Criteria(se https://hibernate.onjira.com/browse/HHH-869)的查询。您将不得不恢复到HQL或SQL限制。