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

Hibernate 使用正确的查询休眠JPA空结果,hibernate,list,jpa,collections,empty-list,Hibernate,List,Jpa,Collections,Empty List,Hibernate retrieve返回空列表,而应为填充列表。 涉及2个对象,通过注释进行映射: @Entity @Table(name = "parent") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) class Parent { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ID") private long

Hibernate retrieve返回空列表,而应为填充列表。 涉及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执行这组代码时,它返回一个大小为0的列表。打开SQL日志并执行MAMP中日志中提供的查询将返回预期结果,有人有什么想法吗?

这应该可以解决问题:

q.setParameter(1, parentId);

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

这将解决问题:

q.setParameter(1, parentId);

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

而不是此导入:

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

import org.hibernate.Query

代替此导入:

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

import org.hibernate.Query

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


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

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


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

我感到震惊,这并不能解决问题,即使我将查询更改为“从子c中选择c”这样简单的查询,它仍然返回一个空列表:/n以编程方式填充子数据库,所以这也不是一个配置问题:/I很抱歉,这并不能解决问题,即使我将查询更改为“从子c中选择c”这样简单的内容,它仍然返回一个空列表:/I以编程方式填充子数据库,所以这也不是一个配置问题:/I您能详细说明一下您到底做了什么吗?因为我在交易中。但是看起来查询没有使用事务。您能详细说明一下您到底做了什么吗?因为我在交易中。但看起来查询没有使用事务。