休眠中的 FieldType.nested 是什么
whats is FieldType.nested in hibernate
我试图理解以下代码。
```
class Member {
@Id
private Long id;
@OneToOne(optional = false,
cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE})
@MapsId
@Field(type = FieldType.Nested)
private Reference reference;
}
```
基本上我开始分析这个 class 因为我们有 n+1 个关于会员的问题。它起源于 @ManyToOne
关系,所以我在 Member
之上添加了 @Batchsize
并部分解决了我的问题。它部分解决了,因为另一个 @OneToOne
关系仍在触发 n 查询。我想将这种关系转换为 Lazy
并用 BatchSize
进行注释,但考虑到以上两个注释 - MapsId
和 @Field(type = FieldType.Nested)
,我无法理解它的影响
谁能帮我理解这些注释以及如果我建立这种关系可能产生的影响Lazy
我会尝试解释所有这三个
1. FetchType Lazy 和 Eager
如果获取类型是 Eager。当您调用 "Select * from Member" 时,您会看到休眠 "Select r from Reference where id = ?"
触发了另一个查询
如果获取类型是惰性的,则在您执行类似操作之前不会触发第二个查询
Member m = getMember(id);
m.getReference(); // Hibernate will fire another query.
大多数情况下我使用 LAZY
2。 @Batchsize
- 在 get 调用 BatchSize 的情况下表现如下
例如:
假设您已经获取了 25 个 Member 实例,并且每个 Member 都有对 Reference 的引用。参考 class 与 lazy="true".
映射
如果您遍历 mem.getReference()
,默认情况下,Hibernate 将执行 25 SELECT 条语句来检索代理引用。
- 您可以通过在 Reference 的映射中指定批量大小来调整此行为,假设为 batchSize 10
- Hibernate 现在将只执行三个查询:模式是
10, 10, 5.
3。 FieldType.Nested
当您需要索引对象数组并保持每个对象的独立性时,应使用此数据类型。
这意味着所有对象的值不会像您在上面看到的那样混合在一起。
在内部,数组中的每个对象都作为单独的隐藏文档进行索引。
更多详情here
我试图理解以下代码。
```
class Member {
@Id
private Long id;
@OneToOne(optional = false,
cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE})
@MapsId
@Field(type = FieldType.Nested)
private Reference reference;
}
```
基本上我开始分析这个 class 因为我们有 n+1 个关于会员的问题。它起源于 @ManyToOne
关系,所以我在 Member
之上添加了 @Batchsize
并部分解决了我的问题。它部分解决了,因为另一个 @OneToOne
关系仍在触发 n 查询。我想将这种关系转换为 Lazy
并用 BatchSize
进行注释,但考虑到以上两个注释 - MapsId
和 @Field(type = FieldType.Nested)
谁能帮我理解这些注释以及如果我建立这种关系可能产生的影响Lazy
我会尝试解释所有这三个
1. FetchType Lazy 和 Eager
如果获取类型是 Eager。当您调用 "Select * from Member" 时,您会看到休眠 "Select r from Reference where id = ?"
触发了另一个查询
如果获取类型是惰性的,则在您执行类似操作之前不会触发第二个查询
Member m = getMember(id); m.getReference(); // Hibernate will fire another query.
大多数情况下我使用 LAZY
2。 @Batchsize
- 在 get 调用 BatchSize 的情况下表现如下 例如:
假设您已经获取了 25 个 Member 实例,并且每个 Member 都有对 Reference 的引用。参考 class 与
lazy="true".
映射
如果您遍历
mem.getReference()
,默认情况下,Hibernate 将执行 25 SELECT 条语句来检索代理引用。- 您可以通过在 Reference 的映射中指定批量大小来调整此行为,假设为 batchSize 10
- Hibernate 现在将只执行三个查询:模式是
10, 10, 5.
3。 FieldType.Nested
当您需要索引对象数组并保持每个对象的独立性时,应使用此数据类型。
这意味着所有对象的值不会像您在上面看到的那样混合在一起。
在内部,数组中的每个对象都作为单独的隐藏文档进行索引。
更多详情here