我在产品和参数之间有一个单一的关系。(JavaAssistant 用于实现惰性引用。代码在 Spring-Container 中执行)。
@Entity
public class Product extends AbstractEntity {
@javax.persistence.ManyToOne(fetch = FetchType.LAZY)
@javax.persistence.JoinColumn(name = "parameterID")
private Parameter parameter;
...
}
现在我执行:
1. Product p = em.find(Product.class, 1L);
2. System.out.println(p.getParameter().getId())
在日志中我可以看到:
select ... **product1_.parameterID** as paramet11_38_ ... from Product product1_ where product1_.id=?
select parameter0_.id as id49_0_ ... from Parameter parameter0_ where parameter0_.id=?
为什么 Jpa 在知道参数的 id 时执行第二行的查询(因为它在第一行中读取)?当它被要求提供除 id 之外的其他属性时,它应该执行查询。你不觉得吗?为什么会这样?我们可以强制 Hibernate 做出不同的行为吗?
环境:
- Hibernate 3.6.10 作为 JPA 提供者
- 春天 3.1.0
- JavaAssistant 用于实现惰性引用