gpt4 book ai didi

spring - 实体类何时增强,用于什么? jpa, Spring , hibernate ,javassist

转载 作者:行者123 更新时间:2023-12-04 20:17:18 26 4
gpt4 key购买 nike

我正在使用 spring 3.0.6、jpa 2.0、hibernate 3.6.8。
我的问题是,在哪些情况下 javassist 用于为 EntityClass 创建“代理”?这个代理的原因是什么?
我有以下实体:

@Entity
public MyEntity{
..

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "adresseID")
private Adresse adresse;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "myEntity")
private List<Parameter> parameters;

..
}

当我从数据库加载 MyEntity 时,实体类类似于 MyEntity__$$_javassist。为什么要这样做?做什么的?我认为这里可以使用普通的 MyEntity 类。

为了实现延迟加载,我们可以:
  • 对于@OneToMany - PersistenceBag 可以在这里使用
  • 对于@ManyToOne - 这里应该使用“enchancedClass”,如 Adress_$$_javassist

  • 那么增强 MyEntity 的原因是什么?我在哪里可以阅读更多关于它的信息?你能推荐我哪本书/文章/博客?

    最佳答案

    实体类增强的主要原因是 JPA(或 Hibernate)需要跟踪实体对象状态。

    特别是 JPA 必须知道给定的实体字段是否“脏” - 它已被用户修改,但此更改尚未反射(reflect)在数据库中,因此 JPA 必须在提交事务时将其与数据库同步。

    另一种情况是实体字段的“加载”状态。任何字段都可以分配为延迟加载。当将要使用这样的字段时,JPA 必须意识到必须执行数据库查询来初始化该字段的值。

    Hibernate 的默认设置是使用运行时增强 - 代理只是添加了额外内容的实体的子类。

    概述了一些总体思路 here .

    关于spring - 实体类何时增强,用于什么? jpa, Spring , hibernate ,javassist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10625626/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com