虽然在Spring的OpenSession / EntityManagerInViewFilter的主题上写了很多post,但是我找不到任何提及它的缺陷。 据我所知,并假设使用@Transactional服务层的典型分层Web应用程序体系结构,filter的工作原理如下: filter拦截一个servlet请求 filter打开一个EntityManager并将其绑定到当前线程 networking控制器被调用 Web控制器调用服务 事务拦截器开始一个新的事务,检索线程绑定的EntityManager并将其绑定到事务 服务被调用,用EntityManager做一些东西,然后返回 事务拦截器刷新EntityManager然后提交事务 networking控制器准备视图,然后返回 视图被build立 filterclosuresEntityManager并从当前线程中解除绑定 在步骤8和9中,由线程的EntityManager加载的对象仍然被pipe理。 因此,如果在这些步骤中使用了惰性关联,那么将使用仍然打开的EntityManager从数据库加载它们。 据我所知,每个这样的访问都要求数据库打开一个事务。 Spring的事务pipe理将不知道这一点,因此我称之为“隐式事务”。 我看到2个问题: 加载多个惰性关联会导致多个数据库事务,这可能会影响性能 根对象及其惰性关联会加载到不同的数据库事务中,因此数据可能会过时(例如,线程1加载的根,线程2更新的根关联,线程1加载的根关联) 一方面,这两个问题似乎足以拒绝使用这个filter(性能命中,数据不一致)。 另一方面,这个解决scheme非常方便,避免写几行代码,问题1可能不那么明显,问题2可能是纯粹的偏执狂。 你怎么看? 谢谢!
我遇到了一对一延迟加载在hibernate中无法正常工作的问题。 我已经解决了 ,但仍然没有正确理解会发生什么。 我的代码( 懒加载不工作在这里 ,当我拉人 – 地址也被提取): @Entity public class Person{ @Id @SequenceGenerator(name = "person_sequence", sequenceName = "sq_person") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence") @Column(name = "id") private long personID; @OneToOne(mappedBy="person", cascade=CascadeType.ALL, fetch = FetchType.LAZY) private Adress address; //.. getters, setters } @Entity public class Address { @Id @Column(name="id", unique=true, nullable=false) @GeneratedValue(generator="gen") @GenericGenerator(name="gen", strategy="foreign", […]
我有一个非常大的JavaScript文件,我想加载只有当用户点击某个button。 我正在使用jQuery作为我的框架。 有没有一个内置的方法或插件可以帮助我做到这一点? 一些更多的细节:我有一个“添加评论”button,应该加载TinyMCE JavaScript文件(我把所有的TinyMCE东西煮成一个JS文件),然后调用tinyMCE.init(…)。 我不想在初始页面加载,因为不是每个人都会点击“添加评论”。 我明白我可以这样做: $("#addComment").click(function(e) { document.write("<script…") }); 但有没有更好的/封装的方式?
Java中的延迟加载是什么? 我不明白这个过程。 任何人都可以帮助我理解延迟加载的过程吗?