标签: lazy-loading

什么是Hibernate中的延迟加载?

什么是Java中的延迟加载?我不明白这个过程.任何人都可以帮我理解延迟加载的过程吗?

java orm hibernate lazy-loading

170
推荐指数
8
解决办法
25万
查看次数

实体框架linq查询Include()多个子实体

这可能是一个非常重要的问题,但是当编写跨越三个级别(或更多)的查询时,包含多个子实体的好方法是什么?

即我有4个表:Company,Employee,Employee_CarEmployee_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);
Run Code Online (Sandbox Code Playgroud)

必须有一个更优雅的方式!这是冗长的,并产生可怕的SQL

我在VS 2010中使用EF4

linq entity-framework lazy-loading

167
推荐指数
4
解决办法
26万
查看次数

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)
Run Code Online (Sandbox Code Playgroud)

当我尝试从main调用以下行时:

Model subProcessModel = getModelByModelGroup(1112);
System.out.println(subProcessModel.getElement().getNote());
Run Code Online (Sandbox Code Playgroud)

getModelByModelGroup(int modelgroupid)首先实现了这个方法,如下所示:

public static Model getModelByModelGroup(int modelGroupId, boolean openTransaction) {

    Session session = SessionFactoryHelper.getSessionFactory().getCurrentSession();     
    Transaction tx = null;

    if (openTransaction) {
        tx = session.getTransaction();
    }

    String responseMessage = "";

    try {
        if (openTransaction) {
            tx.begin();
        }
        Query query = session.createQuery("from Model where modelGroup.id = :modelGroupId");
        query.setParameter("modelGroupId", modelGroupId); …
Run Code Online (Sandbox Code Playgroud)

java orm session hibernate lazy-loading

159
推荐指数
10
解决办法
40万
查看次数

将Hibernate代理转换为真实实体对象

在Hibernate期间Session,我正在加载一些对象,并且由于延迟加载,其中一些被加载为代理.一切都好,我不想把懒人装完.

但后来我需要通过RPC将一些对象(实际上是一个对象)发送到GWT客户端.碰巧这个具体对象是代理.所以我需要把它变成一个真实的对象.我在Hibernate中找不到类似"实现"的方法.

如何知道他们的类和ID,将一些对象从代理转换为实际?

目前,我看到的唯一解决方案是从Hibernate的缓存中驱逐该对象并重新加载它,但由于许多原因它真的很糟糕.

java proxy hibernate jpa lazy-loading

153
推荐指数
6
解决办法
9万
查看次数

JQuery动态加载Javascript文件

我有一个非常大的javascript文件,我只想在用户点击某个按钮时加载.我使用jQuery作为我的框架.是否有内置方法或插件可以帮助我这样做?

更多细节:我有一个"添加注释"按钮,应该加载TinyMCE javascript文件(我把所有TinyMCE的东西都煮成了一个JS文件),然后调用tinyMCE.init(...).

我不想在初始页面加载时加载它,因为不是每个人都会点击"添加评论".

我明白我可以这样做:

$("#addComment").click(function(e) { document.write("<script...") });
Run Code Online (Sandbox Code Playgroud)

但是有更好/封装的方式吗?

javascript jquery tinymce lazy-loading jquery-plugins

131
推荐指数
2
解决办法
11万
查看次数

为什么Hibernate Open Session in View被认为是一种不好的做法?

您使用什么样的替代策略来避免LazyLoadExceptions?

我确实理解在视图中打开会话有以下问题:

  • 分层应用程序在不同的jvm中运行
  • 事务只在最后提交,很可能你以前想要结果.

但是,如果您知道您的应用程序在单个虚拟机上运行,​​为什么不通过在视图策略中使用开放会话来减轻您的痛苦?

java hibernate jpa lazy-loading open-session-in-view

104
推荐指数
5
解决办法
6万
查看次数

当用户将图像滚动到视图中时,如何动态(或懒惰地)加载图像

我在很多"现代"网站(例如脸书和谷歌图片搜索)中都注意到了这一点,只有当用户向下滚动页面足以将它们带入可见视口区域时,<img>才会加载折叠下方的图像(在查看源上,页面显示标签数量为X,但不会立即从服务器获取.这种技术叫做什么,它是如何工作的以及它有多少浏览器可以工作.是否有一个jQuery插件可以用最少的编码实现这种行为.

编辑

额外奖励:有人可以解释是否存在"onScrolledIntoView"或HTML元素的类似事件.如果没有,这些插件如何工作?

html javascript jquery scroll lazy-loading

93
推荐指数
5
解决办法
10万
查看次数

什么是懒惰加载?

什么是懒惰加载?

[阅读几个答案后编辑]为什么人们经常使用这个术语?

假设您只使用ASP/ADO记录集并将其加载数据或ADO.NET数据源以用于gridview.

我想我应该问为什么人们使用"懒惰加载"一词,"其他"类型是什么?

data-binding lazy-loading

89
推荐指数
6
解决办法
7万
查看次数

Hibernate延迟加载应用程序设计

我倾向于将HibernateSpring框架结合使用,并使用声明式事务划分功能(例如@Transactional).

众所周知,hibernate试图尽可能地非侵入性透明性,但是这在使用关系时证明更具挑战性lazy-loaded.


我看到了许多具有不同透明度的设计方案.

  1. 使关系不是懒惰的(例如, fetchType=FetchType.EAGER)
    • 这违反了延迟加载的整个想法..
  2. 使用初始化集合 Hibernate.initialize(proxyObj);
    • 这意味着与DAO的相对高耦合
    • 虽然我们可以定义一个接口initialize,但是其他实现并不能保证提供任何等价物.
  3. 将事务行为添加到持久Model对象本身(使用动态代理@Transactional)
    • 我没有尝试过动态代理方法,尽管我似乎从来没有让@Transactional处理持久对象本身.可能是因为hibernate是在代理上运行的.
    • 交易实际发生时失去控制权
  4. 提供惰性/非惰性API,例如loadData()loadDataWithDeps()
    • 强制应用程序知道何时使用哪个例程,再次紧耦合
    • 方法溢出loadDataWithA(),....,loadDataWithX()
  5. 强制查找依赖关系,例如,仅通过提供byId()操作
    • 需要很多非面向对象的例程,例如,findZzzById(zid)然后getYyyIds(zid)而不是z.getY()
    • 如果事务之间存在大量处理开销,则逐个获取集合中的每个对象可能很有用.
  6. 创建@Transactional 应用程序的一部分,而不仅仅是DAO
    • 嵌套事务的可能考虑因素
    • 需要适用于事务管理的例程(例如,足够小)
    • 虽然可能导致大量交易,但程序性影响较小
  7. 为DAO提供动态提取配置文件,例如,loadData(id, fetchProfile);
    • 应用程序必须知道何时使用哪个配置文件
  8. AoP类型的事务,例如,拦截操作并在必要时执行事务
    • 需要字节码操作或代理使用
    • 执行交易时失去控制权
    • 黑魔法,一如既往:)

我错过了任何选择吗?


在尝试最小化lazy-loaded应用程序设计中关系的影响时,哪种方法是您首选的方法?

(哦,对不起WoT)

java spring hibernate lazy-loading application-design

86
推荐指数
2
解决办法
2万
查看次数

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) session.get(MyEntity.class, entityId);
   proceed(session); // FLUSH, COMMIT, CLOSE session!

   Utils.objectToJson(entity); //TROUBLES, because it can't convert to json lazy collections
}
Run Code Online (Sandbox Code Playgroud)

真是个问题:

问题是我不能在会话关闭后拉懒惰集合.但我也不能在proceed方法中关闭会话.

什么解决方案(粗解决方案):

a)在会话关闭之前,强制hibernate拉取惰性集合

entity.getAddresses().size();
entity.getPersons().size();
Run Code Online (Sandbox Code Playgroud)

....

b)使用@Fetch(FetchMode.SUBSELECT) …

java hibernate lazy-loading

77
推荐指数
5
解决办法
11万
查看次数