Association它指明了两个View之间的关系,如果一个View A中定义了Association到另外一个View B时,View A可以把这个Association作为一种特殊类型的字段暴露在selection list里面,那么当上层的另一个View C使用到View A时,他可以通过View A中暴露的这个Association去取View B中的字段。
也就是说只有当View C会用到View B中的字段时,在Runtime的时候View A就会去做left outer join到View B,当上层的View没有用到View B中的字段时,View A就不会Join View B。这样就能提升了View的性能,因为如果直接使用left outer join,那么View A就肯定会join View B,不管上层会不会用到View B中的字段。Association在底层应该也是用left outer join实现的。
如果两个View中的字段是在Business Logic中是必定会用到的,那么就用Join;如果只是提供一个额外连接,但上层用户有需要时自行去取这些字段,那么就用Association。
我的理解是通过association暴露出来的字段是一种lazy join的behavior,只有当field真正被另一个view用到的时候才会去做join。
本质上,所有的association在runtime时都会被interpret为left out join,当然前提是这个association你在runtime的时候用到了。