您的位置:首页 > 其它

特殊 类info_text 通过搜索id获取对象为代理类,却不是实体类

2017-08-02 16:47 197 查看
特殊 类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都是一样的,所以一直获取的都是该代理对象.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: