【发布时间】:2011-08-22 01:47:02
【问题描述】:
我最近玩过 Play!framework,发现它很棒,尤其是使用 JPA 的模型。它有助于加快开发过程。 但是,按照建议,我们应该只在查询中选择必要的字段,而不是选择 *.如何使用 JPA 选择一些字段而不是全部?是否必须使用 JPQL?
【问题讨论】:
标签: jpa playframework
我最近玩过 Play!framework,发现它很棒,尤其是使用 JPA 的模型。它有助于加快开发过程。 但是,按照建议,我们应该只在查询中选择必要的字段,而不是选择 *.如何使用 JPA 选择一些字段而不是全部?是否必须使用 JPQL?
【问题讨论】:
标签: jpa playframework
如果你想使用投影,你可以使用 Play! JPA 直接查询工具:
JPA.em().createQuery("select title,author from Article");
Article.find("select title from Article");
但不要试图优化得太快,尽可能多地使用普通实体查找器,以便仅针对性能敏感的查询恢复到自定义投影。你最好缓存东西而不是检索部分对象,因为你会破坏你的对象封装并且以后肯定会遇到麻烦。
【讨论】:
我相信你有一个误解。 JPA 返回实体,即通过 ORM 持久化在数据库中的对象。这意味着您不能只选择某些字段,而是获取实体中的所有数据。
所以使用没有“只返回几个字段”这样的东西。如果您使用的是原始 SQL (jdbc),这将适用。
在使用 JPQL 时,Play 提供了一些辅助方法来促进查询(请参阅 documentation),否则,您必须使用 JPQL。
【讨论】:
虽然现在最好使用扩展 play.models 的实体。但是,您可以通过键入结果来选择查询产生的值:
public static void myfunction(Long id)
{
String sqlQuery = "SELECT id FROM mytable WHERE propertie="+id;
Long resultId = Mytable.find(sqlQuery).first();
}
【讨论】: