早上好。我一直在寻找试图回答这个问题的方法。
如果您的表具有指向另一个表的外键,并且您想要两个表的结果,则使用基本 sql 您将对外键进行内部联接,您将获得您请求的所有结果信息。当您在外键上生成 JPA 实体时,您会在外键列上获得 @oneToone 注释、@oneToMany、@ManyToMany、@ManyToOne 等。我在外键上有@oneToMany,在相关表列的主键上有相应的@ManyToOne 我还在正确的列上有@joinedON 注释...我还有一个基本的命名查询,它将从第一个中选择所有内容桌子。我是否需要像在基本 sql 中那样从两个表中获取信息?或者我有这些注释的事实会为我拉回这些记录吗?要清楚,如果我有基于外键关系与表 B 相关的表 A,并且我想要两个表中的记录,我将根据外键将表 A 连接到 B 或
Select * From A inner Join B on A.column2 = B.column1
或其他一些诸如此类的废话(请原谅我的sql,如果它不完全正确,但您明白了)...该查询将选择A和B中的所有列,其中这两个选择的列...这是我的我正在使用的命名查询....
@NamedQuery(name="getQuickLaunch", query = "SELECT q FROM QuickLaunch q")
这就是我在我的无状态会话 bean 中调用它的方式......
try
{
System.out.println("testing 1..2..3");
listQL = emf.createNamedQuery("getQuickLaunch").getResultList();
System.out.println("What is the size of this list: number "+listQL.size());
qLaunchArr = listQL.toArray(new QuickLaunch[listQL.size()]);
}
现在该调用返回表 A 的所有列,但缺少表 B 的列。我的第一反应是更改查询以连接两个表......但这让我想到使用的意义何在JPA 那么如果我只是在写同样的查询,无论如何我都会写,只是在不同的地方。另外,我不想忽略一些简单的事情。那么你说堆栈溢出爱好者呢?如何使用 JPA 取回连接查询的所有数据?