假设我有一个模型 M1.java 包含
@BelongsTo(foreignKeyName = "m2_id", parent = M2.class)
,然后在加载 M1 之后我这样做
M2 myM2 = myM1.parent(M2.class)
我想进行一个额外的查询来获取 M2 对象(类似于 Hibernate FetchType.LAZY),我们如何在第一个查询上强制加入(加载 M1 对象)?
在不可能的情况下,或者在某些情况下我不想加入,是否会每次调用parent(M2.class)
重新运行查询以加载 M2,还是会在第一次“获取”后缓存在 M1 对象中?
谢谢。
编辑:
我发现这个页面http://javalite.io/lazy_and_eagerinclude()
解释说除非我使用该方法,否则不会缓存父级。
问题是当我使用它时,我在日志中看到使用一个查询来选择父母的查询,但我仍然看到额外的查询再次将它们一一加载!所以不是 O(2) 而不是 O(n+1),而是 O(n+2)!
...
// Both test tables contain 1 row
List<M1> myM1s = M1.where(query, params).include(M2.class);
...
// Duplicating 3 times the print statement for test purpose
System.out.println(myM1s.get(0).parent(M2.class));
System.out.println(myM1s.get(0).parent(M2.class));
System.out.println(myM1s.get(0).parent(M2.class));
...
日志
Query: "SELECT * FROM m1 WHERE...", with parameters:...
Query: "SELECT * FROM m2 WHERE id IN (1)"
Query: "SELECT * FROM m2 WHERE id = ?", with parameters: <1>
[print statement]
Query: "SELECT * FROM m2 WHERE id = ?", with parameters: <1>
[print statement]
Query: "SELECT * FROM m2 WHERE id = ?", with parameters: <1>
[print statement]
到底是怎么回事?