我使用的是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 Listarameter> parameters;
..
}
当我从db加载MyEntity时,实体类就像MyEntity __ $$_ javassist.为什么这样做?做什么的?我认为这里只能使用常规类MyEntity.
要实现延迟加载,我们可以:
>对于@OnetoMany – 可以在这里使用PersistenceBag
> for @ManyToOne – 这里应该使用像“Adress _ $$_ javassist”这样的“enchancedClass”
最佳答案
实体类增强的主要原因是JPA(或Hibernate)需要跟踪实体对象的状态.
特别是JPA必须知道给定的实体字段是否“脏” – 它是由用户修改的,但是这种更改尚未反映在数据库中,因此JPA必须在提交事务时将其与数据库同步.
另一种情况是实体字段的“加载”状态.可以将任何字段指定为延迟加载.当即将使用此类字段时,JPA必须知道必须执行数据库查询以初始化该字段的值.
Hibernate的默认设置是使用运行时增强 – 代理只是实体的子类,添加了额外的东西.
here概述了一些一般性的想法.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。