特殊 类InfoText 通过搜索id获取对象为代理类,却不是实体类
1.InfoText 类中包含三个longtext 类型的属性,id text text1 text2
不管是通过 query.list() 方法 还是session.get() 方法获取的InfoText 对象都为实体类的代理对象 infotext_javassist
但是其他对象搜索出来却是实体类。且搜索方式一致
如 InfoMain 对象,怀疑是longtext 类型的属性导致,但是在InfoMain 中添加了三个类似的longtext 的属性,依然没有搜索出代理对象来,说明跟大类型的属性没有任何关系
直接使用sql语句来搜索的话,InfoText 是可以获取到对象信息的
最终找到原因为:
在InfoMain 与InfoText 实体对象做1对1关联时,为了实现InfoText 的懒加载 添加了属性 optional=false
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY,optional=false)
@PrimaryKeyJoinColumn
@ExcelField(title = "新闻内容", align = 2, sort = 25, fieldType = InfoTextType.class)
@NotFound(action=NotFoundAction.IGNORE)
public InfoText getInfoText() {
return infoText;
}
去掉optional=false 后正常获取InfoText 对象。
另一点 在获取对象InfoMain 之前 先获取InfoText ,这时的InfoText 也是普通对象不是代理对象。
问题解决
总结:虽然在InfoMain 中设置了 InfoText 为懒加载,但是获取InfoMain 时,就获取了 InfoText 的代理对象,此时的代理对象应该是存到session中了,
导致无论用什么方式再去获取InfoText 都获取了该代理对象
如下:
qnit.modules.info.entity.InfoText@6ff1797f
qnit.modules.info.entity.InfoText@6ff1797f
id都是一样的,所以一直获取的都是该代理对象.