来自具有 OneToMany 关系的 Hibernate 的奇怪行为
Strange behaviour from Hibernate with OneToMany relationship
我的代码涉及 3 个实体:
@Entity
public class Data implements Serializable {
...
@OneToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER,
targetEntity = Bit.class,mappedBy = "data")
private Collection<Bit> bit;
@OneToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER,
targetEntity = Linked.class,mappedBy = "data")
private Collection<Linked> linked;
}
@Entity
public class Linked implements Serializable {
...
@EmbeddedId
private LinkIdPK id;
@ManyToOne(optional=true,fetch = FetchType.EAGER,targetEntity = Data.class)
private Data data;
}
@Entity
public class Bit implements Serializable {
...
@EmbeddedId
private BitIdPK id;
@MapsId("data")@ManyToOne(optional=true,targetEntity = Data.class)
private Data data;
我正在使用 Spring 存储库执行搜索以获取数据的一个实例。我知道我从数据库中查询的元素在数据库中有“3 位”元素和“1 个链接”元素。
当我遍历Data.bit
中的Bit元素时,我找到了3个元素,这是正常的。
但是当我遍历 Data.linked
中的链接元素时,我发现了 3 个指向同一个对象的元素,而我只期望有 1 个元素。
我尝试在数据库中添加 1 个 Bit 元素,现在我在 Data.linked
中发现 4 个元素指向同一个对象。
这是正常行为吗?是我代码中的错误,还是 Hibernate 中的错误?
@MapsID 在链接到数据的多对一映射上 missing.It 可能是您使用嵌入式 ID 时导致问题的原因。
此致,
普拉萨德
终于得到hibernate团队的答复。这似乎是一个已知问题,目前只有一个解决方法:
将注释 @Fetch(value = FetchMode.SUBSELECT)
添加到 OneToMany
集合之一。
我的代码涉及 3 个实体:
@Entity
public class Data implements Serializable {
...
@OneToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER,
targetEntity = Bit.class,mappedBy = "data")
private Collection<Bit> bit;
@OneToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER,
targetEntity = Linked.class,mappedBy = "data")
private Collection<Linked> linked;
}
@Entity
public class Linked implements Serializable {
...
@EmbeddedId
private LinkIdPK id;
@ManyToOne(optional=true,fetch = FetchType.EAGER,targetEntity = Data.class)
private Data data;
}
@Entity
public class Bit implements Serializable {
...
@EmbeddedId
private BitIdPK id;
@MapsId("data")@ManyToOne(optional=true,targetEntity = Data.class)
private Data data;
我正在使用 Spring 存储库执行搜索以获取数据的一个实例。我知道我从数据库中查询的元素在数据库中有“3 位”元素和“1 个链接”元素。
当我遍历Data.bit
中的Bit元素时,我找到了3个元素,这是正常的。
但是当我遍历 Data.linked
中的链接元素时,我发现了 3 个指向同一个对象的元素,而我只期望有 1 个元素。
我尝试在数据库中添加 1 个 Bit 元素,现在我在 Data.linked
中发现 4 个元素指向同一个对象。
这是正常行为吗?是我代码中的错误,还是 Hibernate 中的错误?
@MapsID 在链接到数据的多对一映射上 missing.It 可能是您使用嵌入式 ID 时导致问题的原因。
此致,
普拉萨德
终于得到hibernate团队的答复。这似乎是一个已知问题,目前只有一个解决方法:
将注释 @Fetch(value = FetchMode.SUBSELECT)
添加到 OneToMany
集合之一。