JPA使用命名查询加载对象

时间:2012-02-06 22:33:03

标签: jpa websphere-6.1

我有一个名为Customer.java的JPA对象:

@NamedQueries({@NamedQuery(name="getAccountWithCheckRangeByService", 
query="SELECT c FROM Customer"})
public Long Id;
public Address address;
//getter and setter
}

现在,如果我调用命名查询并加载Custoemr对象。如果我执行c.getAddress(),我会加载地址吗?或者我是否需要编写单独的命名查询来加载地址

2 个答案:

答案 0 :(得分:1)

您可能意味着SELECT c FROM Customer c

如果您想确保加载地址,可以使用fetch joins

SELECT c FROM Customer c JOIN FETCH c.address

答案 1 :(得分:0)

尝试一下 - 看看会发生什么。如果地址是一个单独的实体,则是,它将加载所有依赖实体 - 在这种情况下,您没有注释客户和地址之间的关系是什么,但我猜你已经省略了。您可以对关系注释执行延迟加载,例如@OneToMany(fetch = FetchType.LAZY)。如果address只是Customer中的一列,那么它会加载它虽然你的JPQL语法有点奇怪 - 我会做“SELECT c FROM Customer c”。不确定您的命名查询是否有效但如果您已经尝试过,则必须这样做。