使用正确的查询Hibernate JPA空结果

时间:2012-10-01 09:30:07

标签: hibernate list jpa collections empty-list

Hibernate检索返回空列表,而预期填充列表。 涉及2个对象,通过注释完成映射:

@Entity
@Table(name = "parent")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private long id;
}

@Entity
@Table(name = "child")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
class Child {
    @ManyToOne
    @JoinColumn(name = "parentId")
    @OrderBy(value="id")
    private Parent parent;
}

执行查询:

String queryString = "select c from Child c where c.parent.id = ?1";
Query q = getEntityManager().createQuery(queryString);
q.setParameter("1", parentId);
return q.getResultList();

当hibernate执行那组代码时,它会返回一个size = 0的列表。打开SQL登录并执行MAMP中日志中提供的查询会返回预期结果,任何一个想法?

3 个答案:

答案 0 :(得分:2)

这应解决问题:

q.setParameter(1, parentId);

目前您正在调用Query.setParameter(String, Object),用于在查询中设置命名参数,但您在查询中使用位置参数。将其更改为Query.setParameter(int, Object)将设置位置参数,查询将起作用。

答案 1 :(得分:1)

问题是由于交易管理造成的。 我们使用@Transactional for Spring来指示如何管理交易。但是我们的一些交易策略是错误的。

因此,遇到此问题的人应该打开事务日志记录,以查看事务是否按照您期望的方式提交。阻止您访问尚未提交的交易中的数据。

答案 2 :(得分:0)

而不是这个导入:

import javax.persistence.Query
你应该提到这个:

import org.hibernate.Query