lazy-initialization 相关问题

延迟初始化是延迟创建对象,计算值或其他一些昂贵的进程直到第一次需要时的策略。

如何实现 Hibernate 会话/事务拦截器以避免在 Struts 2 中执行 JSON 结果时出现 LazyInitializationException?

我正在尝试实现 Hibernate 会话/事务拦截器以避免 Struts 2 中 JSON 结果出现 LazyInitializationException,但出现以下异常: 245968 [http-8080-7] 错误实用程序。

回答 3 投票 0

Struts 2 中 JSON 结果出现 LazyInitializationException

我正在尝试实现一个 Hibernate 会话/事务拦截器以避免 Struts2 中 JSON 结果出现 LazyInitializationException,但我还是得到了这个异常: 245968 [http-8080-7] 错误实用程序。

回答 3 投票 0

为什么 Lazy<T> 仅限于静态上下文?

我想使用 Lazy T 来实现记忆化,但初始化函数似乎需要静态上下文。 例如,以下代码拒绝编译,警告非静态我...

回答 3 投票 0

带有支持字段的私有属性的 C# 命名约定

私有属性有官方命名约定吗? 我使用它们来延迟初始化昂贵的字段: 私有字符串_veryExpense; 私人字符串非常昂贵 => _veryExpensi...

回答 1 投票 0

Spring惰性初始化的默认行为

我是spring初学者,ESP控制反转。我很困惑理解以下之间的区别 我是 spring 初学者,ESP 控制反转。我很困惑理解以下之间的区别 <bean id="demo" class="Demo" lazy-init="false"/> <bean id="demo" class="Demo" lazy-init="true"/> <bean id="demo" class="Demo" lazy-init="default"/> 据我了解:lazy-init=false 在启动时创建 bean,lazy-init=true 不会在启动时创建 bean,而是根据特定 bean 的请求创建 bean。 如果我的解释有误,请纠正我。 lazy-init 的默认行为到底是什么?它会如何实例化? 默认行为为 false: 默认情况下,ApplicationContext 实现会急切地创建和 将所有单例 bean 配置为初始化过程的一部分。 一般来说,这种预实例化是可取的,因为错误在 立即发现配置或周围环境, 而不是几个小时甚至几天后。当这种行为不 如果需要,您可以通过以下方式防止单例 bean 的预实例化 将 bean 定义标记为延迟初始化。惰性初始化 bean 告诉 IoC 容器创建一个 bean 实例 第一次请求,而不是在启动时。 我建议阅读 对于那些来到这里并使用 Java 配置的人,您可以使用如下注释将 Bean 设置为惰性初始化: 配置类中: @Configuration // @Lazy - For all Beans to load lazily public class AppConf { @Bean @Lazy public Demo demo() { return new Demo(); } } 用于元件扫描和自动接线: @Component @Lazy public class Demo { .... .... } @Component public class B { @Autowired @Lazy // If this is not here, Demo will still get eagerly instantiated to satisfy this request. private Demo demo; ....... } bean 上的 lazy-init="default" 设置仅指由封闭的 beans 元素的 default-lazy-init 属性设置的内容。 default-lazy-init 的隐式默认值为 false。 如果没有在 bean 上指定 lazy-init 属性,它总是会立即实例化。 lazy-init是bean的属性。 lazy-init 的值可以是 true 和 false。 如果lazy-init为true,那么当向bean发出请求时,该bean将被初始化。 spring容器初始化时,这个bean不会被初始化 和 如果lazy-init为false那么bean将通过spring容器初始化来初始化。 当我们使用 lazy-init="default" 作为 element 中的属性时,容器会选取 element 的 default-lazy-init="true|false" 属性指定的值并将其用作lazy-init =“真|假”。 如果元素中不存在default-lazy-init属性,则元素中的lazy-init =“default”将表现为lazy-init-“false”。

回答 5 投票 0

Spring boot 急切地初始化一些bean

我想为我的 Spring Boot 应用程序启用延迟初始化以缩短启动时间。 但一旦我这样做,就会引起一些问题。例如。我的 KafkaListeners 也没有初始化并且...

回答 2 投票 0

在 Struts 2 中使用 Hibernate 克服延迟初始化和性能问题

在 Hibernate 中,@ManyToOne 关系几乎不会导致任何问题,因为默认的获取类型是 EAGER。 然而,我们在 @OnetoMany 端遇到了关键问题。当我们尝试获取集合时,

回答 2 投票 0

使用 hibernate.enable_lazy_load_no_trans 解决 Hibernate Lazy-Init 问题

我一直遭受着臭名昭著的休眠异常 org.hibernate.LazyInitializationException:无法初始化代理 - 无会话 现在,社会各界一片欢呼 我一直遭受着臭名昭著的休眠异常 org.hibernate.LazyInitializationException: could not initialize proxy - no Session 现在,社区正在欢呼雀跃 <property name="hibernate.enable_lazy_load_no_trans" value="true"/> 说它解决了问题,但谨慎使用。 谨慎使用是什么意思?这个属性实际上是做什么的? 请给我任何见解。 这种方法的问题是你可以产生N+1效果。 想象您有以下实体: public class Person{ @OneToMany // default to lazy private List<Order> orderList; } 如果您有一个返回 10K 人员的报告,并且在此报告中您执行代码 person.getOrderList(),JPA/Hibernate 将执行 10K 查询。这就是 N+1 效果,您将无法控制所有将要执行的查询。 现在想象一下 Order 如下所示: public class Order{ @OneToMany // default to lazy private List<EmailSent> emailSentList; } 现在想象一下,您对 person.getOrderList() 进行了一次迭代,并且对于每个 Order order,您将执行一次 order.getEmailSentList()。现在你能看出问题所在了吗? 对于 LazyInitializationException 你可以有一些解决方案: 使用 OpenInSessionInView 方法。您将需要创建一个将打开和关闭事务的 WebFilter。问题在于N+1效应。 使用 hibernate.enable_lazy_load_no_trans 配置,这是一个 hibernate,如果需要,您将无法将您的项目移植到其他 JPA 提供程序。还可以有N+1的效果 使用名为 PersistenceContext Extended 的 EJB 功能。这样,您将保持多个事务的上下文处于打开状态。问题是:可能会发生 N+1 效应,使用大量服务器内存(实体将保持托管状态) 在查询中使用 FETCH。通过这种方法,您可以执行如下 JPQL/HQL:select p from Person p join fetch p.orderList。通过此查询,您将从数据库加载列表,并且不会产生 N+1 效果。问题是您需要为每种情况编写 JPQL。 如果仍有任何问题,请检查以下链接: 第 1 部分 第 2 部分 这违背了我们利用 Hibernate 通过 Session 概念强制执行可重复读取语义的方式。 当首次加载对象时,如果在会话生命周期内再次引用该对象,则返回相同的对象,无论该对象在数据库中是否已更改。这就是hibernate自动提供的可重复读语义。 使用此设置,您将没有会话提供此保证,因此如果您现在访问此数据,您将获得最新版本的数据。 这可能没问题。但考虑一下这样的场景:该对象长时间保存在某个地方,并且数据发生了很大变化,因此延迟获取的数据与会话处于活动状态时已加载的数据有很大不同。这是你需要关心的。 简单来说,如果您的程序是 不受以下因素影响: 进入时已获取的数据有多陈旧 会话到将从会话中延迟获取的数据 但是,如果这是一个问题(你的程序面临计时问题,一次可能运行良好,另一次则失败)是一个问题,那么在会话中获取所有必要的数据。 解决 LazyInitializationException 的最佳方法是在实体查询中使用 JOIN FETCH 指令。 急切加载对性能不利。此外,还有一些反模式,例如: 在视图中打开会话 hibernate.enable_lazy_load_no_trans 您永远不应该使用它,因为它们要么需要打开数据库连接以进行 UI 渲染(在视图中打开会话),要么在初始持久性上下文之外获取的每个惰性关联都需要数据库连接(hibernate.enable_lazy_load_no_trans ). 有时,您甚至不需要实体,DTO 投影甚至更好。 可能是因为有更好的解决方案,例如@Transactional,其中打开和关闭会话遵循一种非常常见的模式:“打开会话然后将所有内容包装在 try-catch-finally 中;catch 回滚并最终关闭会话。”此注释通常位于 Web 应用程序和服务的请求级别。 或者,如果您需要更精细的控制,您可以使用 SessionFactory 手动打开会话。 正如其他人提到的,延迟加载是您需要注意的事情。这不是灵丹妙药,但非常有帮助。一般来说,如果您的应用程序设计为有许多小请求,那么就可以了。 预加载也可能非常糟糕。例如,当您的对象模型具有大量多对多关系,但您的请求不使用超过一层深度的数据时。 或者你可以暂时忘记整件事。使用延迟加载,直到它成为问题为止。如果确实如此,那么无论如何,使用 Mybatis 会更好。

回答 4 投票 0

惰性属性有什么好处?他们的目的是什么?

惰性财产的目的是什么? Kotlin 语言文档:https://kotlinlang.org/docs/deleated-properties.html#lazy-properties 节省内存?还是有什么...

回答 1 投票 0

惰性属性有什么好处?有什么目的?

惰性财产的目的是什么? Kotlin 语言文档:https://kotlinlang.org/docs/deleated-properties.html#lazy-properties 节省内存?或者是……

回答 1 投票 0

Scala 初始化顺序对象与 val

在下面的程序中,一个对象被报告为 null,即使它已明确初始化。 类 MyClass() 类 MyOtherClass(c: MyClass) 对象 Foo { val myClass = new MyClass() 物体

回答 1 投票 0

使用匕首柄2.42提供延迟注射

匕首柄2.42 我正在尝试使用惰性匕首注入来提供此类。 类 AlgoliaAnalyticsProvider @Inject 构造函数( private val clientInsights:Lazy, p...

回答 2 投票 0

在线程中获取休眠延迟加载对象

我正在使用 Hibernate 5.3、Spring 和 Java 8。 我们的应用程序是一个企业应用程序,最初是在 struts 上创建的,然后在 Spring 中进行一些新的开发。春天不太好

回答 1 投票 0

Spring boot:无法打破bean之间的依赖循环

我正在使用 Spring Boot 创建一个航空公司网站。我有一个 Seat 类和一个 Flight 类,它们代表数据库中的表。这个想法是,每当添加航班时,座位......

回答 1 投票 0

在 Hibernate 中将实体添加到未初始化的延迟集合时提交期间发生 TransientObjectException

假设,我们有两个简单的实体 Parent 和 Child ,如下所示: @实体 公共类Parent扩展BaseEntity { 私有字符串内容; @OneToMany(mappedBy = "父级",

回答 1 投票 0

Selenium WebDriver PageFactory Webelement 初始化

我的网页中有超过 500 个网络元素。如果我在 selenium 中使用带有 PageFactory.initElements() 的页面对象模型,一旦创建对象,它将初始化所有元素。 可以说我是...

回答 1 投票 0

迟到相当于什么?懒惰| TypeScript 中的 Lateinit?

Dart、Kotlin 和 Swift 有一个延迟初始化关键字,主要出于可维护性的原因,可以让您避免使用可选类型。 // 使用空安全: 咖啡类{ 迟来的字符串_tempe...

回答 2 投票 0

Swift 中静态属性和实例属性之间的延迟变量初始化不一致

结构 MyStruct { 静态变量 x = myX() 惰性 var y = myY() } func myX() -> 字符串 { print("myX 正在运行") 返回 ”” } func myY() -> 字符串 { 打印(&...

回答 1 投票 0

使用 AtomicReference 进行惰性初始化

这样可以安全地完成惰性初始化吗?我们发生了一场争论,一位同事声称某些第一个线程可能会失败,并且他们会看到空值。 公共类 TestAtomicReference { ...

回答 1 投票 0

用于延迟初始化的代理对象

是否有任何现成的Python模块提供了一个易于使用的代理对象,仅在真正需要时初始化“真实”对象? 理想情况下,我正在寻找一个透明的实现,所以

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.