ProductとParameterの間に1つの単一の関係があります。(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=?
パラメータのIDがわかっているのに(1行目で読み取られるため)、Jpaが2行目のクエリを実行するのはなぜですか?id以外の属性を要求されたときにクエリを実行する必要があります。思いませんか?なぜそれがそのように振る舞うのですか?Hibernateを別の動作に強制できますか?
環境:
- JPAプロバイダーとしてHibernate3.6.10
- 春3.1.0
- JavaAssistantは、遅延参照を実装するために使用されます