有效地显示多个连接的结果

时间:2011-09-20 12:44:09

标签: sql jpa join

在JPA项目中,我需要显示一个表,其数据来自5个相关实体。 没有JPA,我可以编写一个sql查询,它将5个数据库表连接在一起,并根据某些条件进行过滤。 假设过滤标准中涉及的字段仅是第一个实体的字段。 使用JPA,我可以加载第一个实体的过滤实例,并浏览属性直到最后一个实体。 我担心的是,如果我不能使用fecttype = eager注释,那么对数据库的查询数量可能会爆炸。 在这种情况下哪种方法最好? 我想严格控制将要执行的sql查询,所以我可以对它们进行优化,但是如果我手工编写带有连接的sql查询,我是否必须使用'旧'结果集来检索数据?

1 个答案:

答案 0 :(得分:0)

你可以使用JPA的内置查询语言,JPQL,不是吗? (它确实有一个JOIN运算符。)请注意,这不是标准SQL,只是类似的东西,所以请仔细阅读JPQL文档。是的,这仍然是嵌入在Java代码中的纯文本查询,这是一种耻辱,但是,嘿,Java可以支持开发过程。

这里的主要优点是你可以获得实体对象作为查询的结果 - 尽管你仍然需要从Object中转换它们。您还可以直接在查询字符串中使用对象(记录)及其成员变量(属性),因此这是从旧的JDBC中提升的。

或者您也可以选择Criteria API,但坦率地说,我的体验并不是很好。语法非常糟糕,您基本上最终会自己构建低级查询。这显然是Java最糟糕的......但至少可以从代码中删除包含查询的字符串。我不确定它是否值得。

查看此页面以获取更多信息和示例:

http://download.oracle.com/javaee/6/tutorial/doc/gjise.html