通过示例查询Hibernate

时间:2011-12-20 10:27:33

标签: java hibernate criteria

我有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。

1 个答案:

答案 0 :(得分:0)

示例限制忽略关联(尽管这不是文档,元素集合)。即使您只使用Criteria API(不使用Example),元素集合也不能成为Criteria(se https://hibernate.onjira.com/browse/HHH-869)的查询。您将不得不恢复到HQL或SQL限制。