首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hibernate中的FieldType.nested是什么?

hibernate中的FieldType.nested是什么?
EN

Stack Overflow用户
提问于 2018-10-04 11:07:15
回答 1查看 187关注 0票数 0

下面的代码是我想要理解的。

代码语言:javascript
复制
```javascript

类成员{

@Id

私人长身份;

@OneToOne(可选=假,

代码语言:javascript
复制
        cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE})
代码语言:javascript
复制
@MapsId
代码语言:javascript
复制
@Field(type = FieldType.Nested)
代码语言:javascript
复制
private Reference reference;

}

代码语言:javascript
复制

基本上,我开始分析这个类,因为我们与成员有n+1问题。它起源于@ManyToOne关系,因此我在Member的基础上添加了@Batchsize,使我的问题得到了部分解决。其部分解决是因为其他@OneToOne关系仍然触发n个查询。我想把这个关系转换成Lazy并用BatchSize注释,但是考虑到上面的两个注释MapsId@Field(type = FieldType.Nested),我无法理解它的影响。

有人能帮我理解这些注解吗?如果我把这种关系变成Lazy,可能会产生什么影响?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-04 12:05:29

我会尽力解释这三件事

1. FetchType Lazy和急切的

  • 如果fetch类型是迫切的。当您调用"Select * from成员“时,您将看到hibernate触发的另一个查询”从引用中选择r,其中id = ?“
  • 如果fetch类型为Lazy,则在执行以下操作之前,不会触发第二个查询 成员m= getMember(id);m.getReference();// Hibernate将触发另一个查询。
  • 在大多数情况下,我使用懒惰。

2. @Batchsize

  • 在接到get电话时,BatchSize的行为如下:
  • 让我们假设您已经获取了25个成员实例,并且每个成员都有引用。和用lazy="true".映射的引用类
  • 如果迭代mem.getReference() Hibernate,默认情况下将执行25条SELECT语句来检索代理引用。
  • 您可以通过在引用映射中指定批处理大小来调优此行为,比如batchSize 10。
  • Hibernate现在只执行三个查询:模式是10, 10, 5.

3. FieldType.Nested

  • 当您需要索引对象数组并保持每个对象的独立性时,应该使用此数据类型。
  • 这意味着所有对象的值都不会像上面看到的那样混合在一起。
  • 在内部,数组中的每个对象都作为单独的隐藏文档进行索引。 更详细的这里
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52645201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档