0

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();

当休眠执行该组代码时,它返回一个大小 = 0 的列表。打开 SQL 登录并执行 MAMP 中日志中提供的查询会返回预期结果,任何人有什么想法吗?

4

3 回答 3

2

这应该可以解决问题:

q.setParameter(1, parentId);

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

于 2012-10-01T09:33:04.410 回答
1

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

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

于 2012-10-30T09:10:31.617 回答
0

而不是这个导入:

import javax.persistence.Query

你应该提到这个:

import org.hibernate.Query
于 2012-10-01T12:50:29.380 回答