gpt4 book ai didi

java - 如何在 JPA 中查询组合对象?

转载 作者:行者123 更新时间:2023-12-01 05:27:08 25 4
gpt4 key购买 nike

我现在想知道 JPQL 是否可以检索组合对象。对象A有对象B(聚合)。我可以查询没有与 ObjectA 链接的 ObjectB 吗? native 查询将是这样的:

SELECT * FROM OBJECTB WHERE  ID_OBJECTA = NULL

有时 JPA 会创建一个关联实体,但我假设这里只是添加了 ID_OBJECTA 作为对其聚合器的引用。

感谢您的帮助。

Class ClassA{
public ClassB b;
}

ClassB{
public String data;

}

我知道我可以这样查询:

Select a from ClassA a join a.b bb//Given a retrieve b

我想这样做:

Select b from ClassB b join ...// ClassB doenst have an a Attribute

如何从 ClassB 查询 ClassA

最佳答案

您想要的是双向一对一关联。在这种情况下,您有两种选择:延迟加载或急切加载。两者都不需要在 JQL 中显式连接,除非您想用预先加载来覆盖延迟加载。当然,这是基于以下事实:定义这些对象之间关系的注释/xml 已正确设置。

您需要在 ClassB 中为 ClassA 类型提供一个属性,以保持 ClassB 关系中独立于 ClassA 的更改。此属性还允许 ClassB 上的子查询用数据(热切)或查询 stub (惰性)填充父 ClassA 成员

public ClassA{
ClassB Child;
}

public ClassB{
ClassA parent;
String data;
}

查看此 wiki 书籍条目,它会引导您完成设置。 One To One 它概述了一个非常相似的场景,即处理带有地址,并说明如何通过查询地址来获取该人。

注意:我刚刚读到您正在尝试在没有关联的情况下执行此操作。就像其他发帖者指出的那样,添加这种关系是微不足道的,如果它很懒,那么它几乎不会增加任何开销。我能想到不这样做的唯一原因是一些错误的尝试,以避免对 ClassA 的引用污染 classB。记住“越差越好”简单性 -> 正确性 -> 一致性 -> 完整性。用最简单的方法来解决您的问题,再简单不过了。

关于java - 如何在 JPA 中查询组合对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com