Questions tagged «lazy-loading»

对于有关“延迟加载”的编程问题,一种设计模式将对象的初始化推迟到需要它的时候。

9
如何使JPA OneToOne关系变得懒惰
在我们正在开发的此应用程序中,我们注意到一个视图特别慢。我剖析了该视图,并注意到,即使数据库中只有两个对象要获取,hibernate也执行了一个查询,该查询花费了10秒。所有OneToMany和ManyToMany关系都是懒惰的,所以这不是问题。在检查实际执行的SQL时,我注意到查询中有80多个联接。 在进一步检查该问题时,我注意到该问题是由实体类的深入层次结构OneToOne和ManyToOne实体类之间的关系引起的。所以,我想,我只是让他们懒惰,那应该可以解决问题。但是注释@OneToOne(fetch=FetchType.LAZY)或@ManyToOne(fetch=FetchType.LAZY)似乎不起作用。我得到一个例外,或者然后它们实际上没有被代理对象替换,因此变得很懒。 有什么想法可以让我工作吗?请注意,我不使用persistence.xml定义关系或配置详细信息,所有操作均以Java代码完成。

18
如何修复org.hibernate.LazyInitializationException-无法初始化代理-没有会话
我得到以下异常: Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) at sei.persistence.wf.entities.Element_$$_jvstc68_47.getNote(Element_$$_jvstc68_47.java) at JSON_to_XML.createBpmnRepresantation(JSON_to_XML.java:139) at JSON_to_XML.main(JSON_to_XML.java:84) 当我尝试从以下几行拨打电话时: Model subProcessModel = getModelByModelGroup(1112); System.out.println(subProcessModel.getElement().getNote()); 我getModelByModelGroup(int modelgroupid)首先实现了这样的方法: public static Model getModelByModelGroup(int modelGroupId, boolean openTransaction) { Session session = SessionFactoryHelper.getSessionFactory().getCurrentSession(); Transaction tx = null; if …


4
实体框架linq查询Include()多个子实体
这可能是一个真正的基本问题,但是在编写跨越三个级别(或更多级别)的查询时,包括多个子实体的一种好方法是什么? 即我有4个表:Company,Employee,Employee_Car和Employee_Country 公司与员工的关系为1:m。 Employee与Employee_Car和Employee_Country的关系为1:m。 如果我想编写一个查询来返回所有4个表中的数据,我当前正在编写: Company company = context.Companies .Include("Employee.Employee_Car") .Include("Employee.Employee_Country") .FirstOrDefault(c => c.Id == companyID); 必须有一种更优雅的方式!这很长一段时间,并产生可怕的SQL 我在VS 2010中使用EF4

10
如何将Hibernate代理转换为真实实体对象
在Hibernate期间Session,我正在加载一些对象,由于延迟加载,它们中的一些已作为代理加载。一切正常,我不想关闭延迟加载。 但是稍后我需要通过RPC将一些对象(实际上是一个对象)发送到GWT客户端。碰巧这个具体对象是代理。所以我需要将其变成一个真实的对象。我在Hibernate中找不到类似“实现”的方法。 我如何才能将某些对象从代理变为真实,从而知道它们的类和ID? 目前,我看到的唯一解决方案是从Hibernate的缓存中逐出该对象并重新加载它,但是由于许多原因,它确实很糟糕。

2
jQuery动态加载Javascript文件
我有一个非常大的javascript文件,仅当用户单击某个按钮时才想加载。我正在使用jQuery作为我的框架。有内置的方法或插件可以帮助我做到这一点吗? 一些更多的细节:我有一个“添加注释”按钮,应该加载TinyMCE javascript文件(我已经将所有TinyMCE的东西都煮成了一个JS文件),然后调用tinyMCE.init(...)。 我不想在初始页面加载时加载它,因为不是每个人都将单击“添加评论”。 我了解自己可以做到: $("#addComment").click(function(e) { document.write("<script...") }); 但是有更好的/封装的方法吗?

9
为什么将View中的Hibernate Open Session视为不良做法?
以及您使用哪种替代策略来避免LazyLoadExceptions? 我确实了解到公开会议存在以下问题: 在不同的jvm中运行的分层应用程序 事务仅在最后提交,并且很可能您希望在结果之前提交。 但是,如果您知道您的应用程序在单个vm上运行,为什么不使用视图中开放会话策略来减轻痛苦呢?

8
当用户将图像滚动到视图中时如何动态(或延迟)加载图像
我在许多“现代”网站(例如,facebook和google图片搜索)中都注意到了这一点,只有当用户向下滚动页面足以将其带入可见视口区域时,折叠下方的图像才会加载(在查看源时,页面显示X个<img>标记,但不是立即从服务器获取的)。这种技术叫什么,它如何工作以及在多少浏览器中工作。并且有一个jQuery插件可以用最少的编码实现此行为。 编辑 奖励:有人可以解释HTML元素是否存在“ onScrolledIntoView”或类似事件。如果没有,这些插件如何工作?

11
Hibernate:提取所有懒惰集合的最佳实践
是)我有的: @Entity public class MyEntity { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Address> addreses; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Person> persons; //.... } public void handle() { Session session = createNewSession(); MyEntity entity = (MyEntity) …

13
什么是延迟加载?
什么是延迟加载? [阅读一些答案后进行编辑]人们为什么经常使用此术语? 假设您仅使用ASP / ADO记录集,并使用数据或ADO.NET数据源将其加载到gridview。 我想我应该问为什么人们使用术语“延迟加载”,它们是什么“其他”类型?


3
Hibernate延迟加载应用程序设计
我倾向于将Hibernate与Spring框架结合使用,它具有声明式事务划分功能(例如@Transactional)。 众所周知,休眠试图尽可能做到非侵入性和透明性,但是事实证明,在使用关系时这更具挑战性lazy-loaded。 我看到了许多具有不同透明度的设计方案。 使关系不延迟加载(例如, fetchType=FetchType.EAGER) 这违反了整个延迟加载的想法。 使用初始化初始化集合 Hibernate.initialize(proxyObj); 这意味着与DAO的耦合较高 尽管我们可以使用定义接口initialize,但不能保证其他实现也可以提供等效的接口。 将交易行为添加到持久Model对象本身(使用动态代理或@Transactional) 我没有尝试过动态代理方法,尽管我似乎从未让@Transactional处理持久对象本身。可能由于该休眠而导致对代理进行操作。 实际进行交易时失去控制 同时提供懒/非延迟API,例如,loadData()和loadDataWithDeps() 强制应用程序知道何时采用哪个例程,再次紧密耦合 方法溢出loadDataWithA(),,..,loadDataWithX() 强制查找依赖关系,例如,仅提供byId()操作 需要很多非面向对象的例程,例如,findZzzById(zid)然后getYyyIds(zid)代替z.getY() 如果事务之间的处理开销很大,则以一对一的方式获取集合中的每个对象可能会很有用。 成为应用程序@Transactional的一部分,而不只是DAO 嵌套事务的可能注意事项 需要适合于事务管理的例程(例如足够小) 对程序的影响较小,尽管可能会导致大量交易 为DAO提供动态提取配置文件,例如,loadData(id, fetchProfile); 应用程序必须知道何时使用哪个配置文件 AoP类型的交易,例如,拦截操作并在必要时执行交易 需要字节码操作或代理使用 执行交易时失去控制 一如既往的黑魔法:) 我错过了任何选择吗? 尝试最小化lazy-loaded关系对应用程序设计的影响时,您首选的方法是什么? (哦,很抱歉,WoT)

6
澄清术语-从数据库获取实体时,“水化” JPA或Hibernate实体是什么意思
在ORM /实体的延迟加载的情况下,我对术语“水合”的理解如下: “水合”描述了填充使用延迟加载获取的实体的某些或全部先前未填充的属性的过程。 例如:Author从数据库中加载类: @Entity class Author { @Id long id; List<Book> books; } 最初,books不填充集合。 据我了解,books从数据库加载集合的过程称为“水化”集合。 这个定义正确吗?我应该在此过程中使用另一个更通用的术语吗?


2
休眠:一对一延迟加载,可选= false
我遇到了一个问题,即一对一的延迟加载在休眠状态下不起作用。我已经解决了它,但是仍然无法正确理解会发生什么。 我的代码(延迟加载在这里不起作用,当我拉人时-地址也被获取): @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", parameters=@Parameter(name="property", …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.