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中日志中提供的查询会返回预期结果,任何一个想法?
答案 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