Hibernate懒加载对象转JSON报错,困扰了一周了

diyinyu0476 2017-09-07 01:47:55
项目是SpringMVC+Spring+Hibernate前后端分离架构,后端负责的就是给前端传JSON
Hibernate的懒加载很好用,大大减轻服务器负担,但是SpringMVC支持的Jackson遇到hibernate的懒加载对象似乎没有什么好的处理办法,报错500 no session,也就是数据库已经关闭,懒加载的对象读不出来。
网上找了很多方法:
1、fetchType=eager 数据一次性全部取出
2、@JsonIgnore 把部分字段不json化
这两种因噎废食,无法满足需求
3、实体类上方加注解
@JsonIgnoreProperties(value = {"hibernateLazyInitializer","handler","fieldHandler"})
不知道什么原因完全没有效果
4、web.xml设置拦截器OpenSessionInViewFilter
同样没有效果,不知道是否和前后端分离有关
折腾了几天都没法解决这个问题
请教一下各位有没有什么好的解决办法,万分感谢!
...全文
618 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
子灬丶逾 2019-05-25
  • 打赏
  • 举报
回复
把懒加载设为false 试一试
dennyooo 2018-11-01
  • 打赏
  • 举报
回复
我们也碰到过这个问题,但我们在需要转换为json时,通过重新定义一个本地类来解决(属性与实体对象完全一样),在需要值时,传入实体对象给本地类来构造已加载过数据的对象。然后再序列化,就OK了
diyinyu0476 2017-09-08
  • 打赏
  • 举报
回复
引用 2 楼 pany1209 的回复:
使用Hibernate.initialize(Object obj)为mobiles初始化试试。。。。。
是可以暂时解决,但是对于每次json化都要对所有关联字段设一下太复杂,这样子Hibernate的懒加载就起不到他的作用反而碍手碍脚了
James2119X 2017-09-07
  • 打赏
  • 举报
回复
我遇到的情况是json中有B类属性需要保存到数据库中保存不进去,你这是从数据库中读取B类属性...
李德胜1995 2017-09-07
  • 打赏
  • 举报
回复
使用Hibernate.initialize(Object obj)为mobiles初始化试试。。。。。
diyinyu0476 2017-09-07
  • 打赏
  • 举报
回复
报错信息
HTTP Status 500 - Could not write JSON: failed to lazily initialize a collection of role: com.wfy.web.model.MobileInbound.mobiles, could not initialize proxy - no Session; nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: com.wfy.web.model.MobileInbound.mobiles, could not initialize proxy - no Session (through reference chain: com.wfy.web.common.ServerResponse["data"]->java.util.ArrayList[0]->com.wfy.web.model.MobileInbound["mobiles"])
出错的实体类部分代码

@Entity
@Table(name = "t_mobile_inbound")
@JsonIgnoreProperties(ignoreUnknown = true, value = {"hibernateLazyInitializer","handler","fieldHandler"})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@DynamicUpdate
public class MobileInbound {
    private String id;
    private Supplier supplier;
    private MobileModel mobileModel;
    private Color color;
    private Config config;
    private double buyPrice;
    private int quantity;
    private double amount;
    private Date inputTime;
    private User inputUser;
    private Date checkTime;
    private User checkUser;
    private CheckStatus status;
    private Dept dept;
    private String remark;
    private List<MobileStock> mobiles;

    @OneToMany(mappedBy = "mobileInbound", cascade = CascadeType.ALL)
    public List<MobileStock> getMobiles() { // 这个字段一对多对应另一个实体,就是懒加载报错的地方
        return mobiles;
    }

    public void setMobiles(List<MobileStock> mobiles) {
        this.mobiles = mobiles;
    }

//省略其余getters, setters
随着元宇宙概念兴起与虚拟数字人技术快速发展,虚拟主播、在线教育虚拟助教、元宇宙社交等应用场景对实时动作表情驱动系统提出更高需求。当前主流动作捕捉方案多依赖专业光学动捕设备或深度相机,设备成本高昂、部署复杂,难以在普通用户场景普及。本研究设计并实现一套基于普通单目摄像头的虚拟数字人实时动作表情驱动系统,旨在降低数字人内容生产门槛。系统采用Unity作为主开发引擎,结合Blender进行数字人模型构建与BlendShape表情系统制作,使用MediaPipe框架实现人脸关键点检测与人体姿态估计,通过C#脚本完成实时数据处理与渲染控制。系统包含五个关键模块:人脸关键点检测(MediaPipe Face Mesh提取468个关键点)、人体姿态估计(MediaPipe Pose识别33个骨骼关键点)、表情迁移映射、动作平滑优化(卡尔曼滤波与贝塞尔曲线插值消除抖动)、实时渲染(60fps流畅渲染,支持直播推流与视频录制)。实验结果表明,系统在普通笔记本上可实现60fps实时驱动,人脸关键点检测准确率达98.7%,人体姿态估计平均误差小于5像素,表情迁移相似度达92.3%。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论基础 第3章 系统架构设计 第4章 关键模块设计与实现 第5章 实验与结果分析 第6章 总结与展望 参考文献
内容概要:本文提出了一种基于蒙特卡洛模拟与拉格朗日松弛法的分散式优化策略,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过蒙特卡洛方法模拟电动汽车充电行为的随机性,生成多样化负荷场景,构建以降低电网负荷波动和用户充电成本为目标的优化模型;采用拉格朗日松弛法对耦合约束进行解耦,实现分布式求解,在保障用户隐私的同时提升计算效率。文中设计了详细的仿真场景,系统分析了该调度策略对电网负荷特性和用户经济性的影响,验证了所提方法在实际应用中的有效性与可行性。; 适合人群:具备电力系统运行、优化算法理论及Matlab编程能力的研究生、科研人员以及从事智能电网与电动汽车相关领域的工程技术人员。; 使用场景及目标:①应用于城市规模化充电站集群的有序充电管理,实现电网“削峰填谷”;②为电力公司制定科学合理的分时电价政策提供量化分析工具;③支撑智能电网中需求侧资源的分布式协同优化调度研究与系统设计。; 阅读建议:建议结合提供的Matlab代码深入理解算法实现流程,重点掌握蒙特卡洛场景生成机制与拉格朗日松弛迭代求解过程,可通过调整参数设置复现不同工况下的仿真结果,以深化对分散式优化机制与调度效果之间关系的理解。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧