我有2个表,书和作者,通过表BookHasAuthor加入多对多关系。 BookHasAuthor表是必要的,因为关系本身也有一些其他数据。 Book和Author都有这样的关系声明:
// Book.java
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.book", cascade = CascadeType.ALL)
private Set<BookHasAuthor> authors = new HashSet<BookHasAuthor>(0);
我想要的是通过id查询特定的Book,但同时获取所有关系。这样我就可以在JSON中序列化生成的Book对象,并在Hibernate会话关闭后在Response中返回它。
假设数据库有2本书,每本书有3位作者。一旦创建了Query对象并设置了参数,我就会调用list()
来获取结果数组。问题是到目前为止我的查询尝试只返回了同一本书的3个副本,每个副本都有一个&#34; authors&#34;包含一个条目的数组,或仅包含一个作者的单个Book对象。虽然我不理解第二种行为,但第一种行为是我期望使用简单的SQL,但我使用HQL的主要原因正是要使我自己不必合并所有结果。到目前为止,我还没有找到正确的方法来查询一本书中所有作者的数组。
这些是我到目前为止所尝试的查询:
SELECT item FROM Book item JOIN item.authors WHERE item.id = 1
这将返回3本书,每本书都有一个不同的作者在作者&#34;阵列。使用INNER,LEFT JOIN或JOIN FETCH没有产生任何变化。
SELECT item FROM Book item WHERE item.id = 1
这将返回1本书与#34;作者&#34;只有1位作者的数组。
我觉得我在这里错过了一些非常愚蠢的东西,但我无法理解它是什么。有什么建议吗?
编辑:为了澄清,我已经创建了一个新项目,以同样的方式重做所有内容,并得到我期望的结果,所以我在这里面临的问题可能与此无关我的想法。关于可能导致这个问题的任何想法都是最受欢迎的。