@Lazy和@Proxy,关联关系@OneToOne,@OneToMany,@ManyToOne,@ManyToMany

1、@Lazy和@Proxy

@Lazy:一般定在在类头上。

添加之后默认表示实现懒加载。

懒加载是一种代理加载模式,可以理解为创建对象的时候,先创建对象的代理,代理中申明对象,但是不将对象实体化,当使用实体属性或者方法的时候,才加载创建实体并执行实例方法。

@Lazy(value=false)即不实现懒加载,为急加载。

@Proxy:可以和@Lazy等同。

他有两个属性

// 默认懒加载,false为急加载
boolean lazy() default true;

// 默认设置为自己的类名。如果有代理类或者被继承,使用他们的类名。
Class proxyClass() default void.class;

在有关联的entity实体类中,不建议在类头上添加@Proxy和@Lazy,这样做对于不理解懒加载底层原理的开发者会造成迷惑,同时也会导致实现关联属性业务不好细分。

建议在关联中通过fetch参数设置。可细分一个实体中存在多属性关联的加载关系。

有人说采用懒加载可以节省性能,优化系统使用资源,在大数据量,数据长期持久不变化的情况下,的确可以减少系统开销。但是在数据快速变化,并且写操作较多的场景下,频繁的创建和释放实体和代理,有导致vm内存碎片的风险;同时也会导致获取数据一致性变差,出现异常的可能性。

2、关联关系@OneToOne,@OneToMany,@ManyToOne,@ManyToMany

关联关系有:

@OneToOne:一对一,

// 默认指定标记下的声明对象的类型
Class targetEntity() default void.class;

// 默认无级联关系操作,可以为多个操作集合
CascadeType[] cascade() default {};

// 默认采用急加载,获取这个实体操作的时候,会从同时从数据库找查询最新的关联实体
FetchType fetch() default EAGER;

// 是否允许级联对象为null,默认允许。optional=false,级联对象必须存在。
boolean optional() default true;

// 默认空字符串表示对关系的维护,建议由一方维护,另一方不进行维护。在不维护方类中“维护方属性变量”上设置,设置值为“被维护方在维护方中的属性或者集合”的变量名。
String mappedBy() default "";

// 是否级联删除,和CascadeType.REMOVE的效果一样,只要配置了两种的一种就会自动级联删除
boolean orphanRemoval() default false;

@OneToMany:一对多,

// 默认指定标记下的声明对象的类型
Class targetEntity() default void.class;

// 默认无级联关系操作,可以为多个操作集合
CascadeType[] cascade() default {};

// 默认采用懒加载
FetchType fetch() default LAZY;

// 默认空字符串表示对关系的维护,建议由一方维护,另一方不进行维护。在不维护方类中“维护方属性变量”上设置,设置值为“被维护方在维护方中的属性或者集合”的变量名。
String mappedBy() default "";

// 是否级联删除,和CascadeType.REMOVE的效果一样,只要配置了两种的一种就会自动级联删除
boolean orphanRemoval() default false;

@ManyToOne:多对一,

// 默认指定标记下的声明对象的类型
Class targetEntity() default void.class;

// 默认无级联关系操作,可以为多个操作集合
CascadeType[] cascade() default {};

// 默认采用急加载
FetchType fetch() default EAGER;

// 是否允许级联对象为null,默认允许。optional=false,级联对象必须存在。
boolean optional() default true;

@ManyToMany:多对多。

// 默认指定标记下的声明对象的类型
Class targetEntity() default void.class;

// 默认无级联关系操作,可以为多个操作集合
CascadeType[] cascade() default {};

// 默认采用懒加载
FetchType fetch() default LAZY;

// 默认空字符串表示对关系的维护,建议由一方维护,另一方不进行维护。在不维护方类中“维护方属性变量”上设置,设置值为“被维护方在维护方中的属性或者集合”的变量名。
String mappedBy() default "";

fetch=FetchType.EAGER为急加载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值