|
|
1
75
我也遇到了同样的问题-当您设置FetchType.EAGER以获得@collectionfements时,Hibernate会尝试一次性获取所有内容,即对链接到“master”对象的元素的每个条目使用一个查询。如果将@Fetch(FetchMode.SELECT)注释添加到集合中,则可以通过N+1次查询成功解决此问题。 在我的例子中,我希望有一个MediaObject实体及其元数据项(视频编解码器、音频编解码器、大小等)的集合。metadataItems集合的映射如下所示: @CollectionOfElements (targetElement = String.class, fetch = FetchType.EAGER) @JoinTable(name = "mo_metadata_item", joinColumns = @JoinColumn(name = "media_object_id")) @MapKey(columns = @Column(name = "name")) @Column (name = "value") @Fetch (FetchMode.SELECT) private Map<String, String> metadataItems = new HashMap<String, String>(); |
|
|
2
29
一般来说,在映射中强制执行即时抓取不是一个好主意-最好在适当的查询中指定即时连接(除非您100%确定在任何情况下,如果不填充集合,您的对象都没有意义/有效)。 获取重复数据的原因是因为Hibernate在内部连接了根表和集合表。请注意,它们实际上是重复的,例如,对于2个同义词映射(每个映射有3个集合元素),您将得到6个结果(2x3),每个同义词映射实体的3个副本。因此,最简单的解决方法是将结果封装在一个集合中,从而确保它们是唯一的。 |
|
|
3
7
我曾经面对过这个问题,我用
这将清除由于对子表进行联接而导致的重复项。 |
|
|
4
2
您可以使用SELECT DISTINCT(Hibernate查询语言)子句,如下所示
尽管组件和值类型集合的生命周期都绑定到所属实体类,但您应该在select子句中声明它们,以便检索它们。(左连接获取同义词.values) ChssPly76的答案是另一种方法,但不会忘记根据集合语义覆盖equals和hashcode方法 当做 |
|
|
5
0
而不是
|
|
|
6
0
我通过简单的添加实现了它
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |