关联的延迟选项. LazyCollectionOption可以是 TRUE (集合具有延迟性,只有在访问的时候才加载), EXTRA (集合具有延迟性,并且所有的操作都会尽量避免加载集合,对于一个巨大的集合特别有用, 因为这样的集合中的元素没有必要全部加载)和 FALSE(非延迟加载的关联)
下面例子对LazyCollectionOption的举例说明:
/**********一方********/ @Entity public class WorkGroup{ private String poid; ...... private List<WorkGroupMachine> works = new ArrayList<WorkGroupMachine>;
@Entity public class WorkGroupMachine{ private WorkGroup workGroup; ........... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "WorkGroupId", nullable = false) public WorkGroup getWorkGroup() { return workGroup; } }
如下为test case:
public void testWork(){ WorkGroup group = workGroupEao.findByPoid(getPOID()); group.getWorkGroupMachines().size();
}
console output: select * from WorkGroup w where w.poid = ?; select * from WroupMachine m where m.work_fk = ?; 可见如果LazyCollectionOption.TRUE,在获取size()时,会进行全体查询.并都加载到内存中.
如把上面LazyCollectionOption.EXTRA,后console output: select * from WorkGroup w where w.poid = ?; select count(*) from WroupMachine m where m.work_fk = ?; 此时在内存中不存在WroupMachine的数据,只有在下次request时,如 group.getWorkGroupMachines().get(0).getName()时,才会真正的获取记录到内存中.