我有一个关于Hibernate双向的问题。假设我有2个课程,Class A
和Class B
并且双向相关。这意味着当我查询Class A
时,我也可以获得Class B
,反之亦然。我的问题是当我这样做时hibernate是如何工作的
ClassA classA = ClassA.findClassAById(1);
ClassB = classA.getClassB().getClassA().getClassB();
我知道我只能ClassB
获得classA.getClassB();
,但我也可以获得classA.getClassB().getClassA().getClassB().getClassA().getClassB()...;
有人可以向我解释一下hibernate如何使用双向查询?
我很关心表现。
答案 0 :(得分:0)
Hibernate采用高效的一级缓存,也称为PersistantContext 如果在上下文中加载了一个对象,则hibernate不会访问数据库以获取相同的对象。
在调用findClassAById(1)
的问题语句中classA
在持久性上下文中加载了对象。 classB
对象同时或稍后加载,具体取决于所采用的延迟加载/急切加载策略。在此之后,不应该为所有未来的呼叫理想地命中数据库。
您可以通过google Persistance Context获取有关其工作原理的更多信息。