【问题标题】:hibernate self referencing table get rows by fkhibernate自引用表通过fk获取行
【发布时间】:2013-07-19 10:01:21
【问题描述】:
table Student
----------------
id  | somecolumn with string| fk(which is self referencing ID of the same table)

如何进行休眠查询,以获取 id 值与 fk 值匹配的所有项目。

这是我尝试过的,但它不起作用(它只返回 1 个结果而不是结果集)

List<Student> list = (List<Student>) sessionFactory
            .getCurrentSession()
            .createQuery("from Student p join p.studentFKs p2 where p2.id = :parentId")
            .setParameter("parentId", parentId).list();

有人可以帮我解开这个谜吗?我知道它也可以通过 Hibernate 标准来实现。

UPDATE 答案是将查询更改为(加入无效..):

select p from Student p join p.student p2 where p2.id = :parentId

【问题讨论】:

  • 你可以在这里发布你的实体类吗?
  • 答案是更改查询。不是通过哈希集加入,而是通过相同的类类型加入,因为它是自引用表。我用答案更新了我的问题

标签: java sql spring hibernate hibernate-mapping


【解决方案1】:

我用这样的东西,这是工作

实体Student内部的join属性:

@ManyToMany(cascade = CascadeType.REFRESH)
private Set<Student> testJoins = new HashSet<Student>();

HQL 得到那套:

select a.testJoins from Student a where a.id = :parentId

也许您可以将查询从 p2.id = :parentId 更改为-->> p.id = :parentId

【讨论】:

  • 我已经解决了,答案是将查询from Student p join p.studentFKs p2 where p2.id = :parentId改为select p from Student p join p.student p2 where p2.id = :parentId
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2012-06-20
  • 2021-05-14
  • 2013-03-05
  • 2019-09-24
  • 1970-01-01
相关资源
最近更新 更多