2011-12-20 65 views
0

我已经具有一些原始属性和类型也B. B型的构件类A有一个图:Hibernate查询,通过示例

//映射名称数

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; 
} 

现在我想找到一个例子。我定义了以下内容:

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的所有数据库条目,并忽略B中映射的相等性。

有什么线索我做错了什么?

谢谢, Ronen。

回答

0

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