请教hibernate的lzay问题!关于懒加载的子类。谢谢。

luoxiang2000 2008-02-22 04:06:26
比如,有一个用户类UserBean,SuperUserBean1、SuperUserBean2继承自UserBean.然后有一个货品类GoodsBean包含一个UserBean,而且是懒加载的.如下:
UserBean {
String id;
String name;
}

SuperUserBean1 extends UserBean {
String xxx1;
}

SuperUserBean2 extends UserBean {
String xxx2;
}

GoodsBean {
String id;
UserBean ub;
}

现在取出一个id=01的GoodsBean的时候,其实际对应的不是一个UserBean用户,而是SuperUserBean1或者 SuperUserBean2,但是默认取出来的相应用户是一个UserBean,这个时候就得不到xxx1或者xxx2属性,不知道要怎么搞?
就算我知道返回的应该是一个SuperUserBean1,也不能调用((SuperUserBean1)goodsbean.getUb()).getXxx1();会跑出异常ClassCastException。
如果是lazy="false"的话,就会自动取出当前GoodsBean的对应的SuperUserBean1或者SuperUserBean2。

哪位知道要怎么解决阿,谢谢了!
...全文
254 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoxiang2000 2008-02-22
  • 打赏
  • 举报
回复
谢谢。我取数据的过程中并没有使用事务。每次都要生成特殊的hql语句太麻烦了。
forestking_xx 2008-02-22
  • 打赏
  • 举报
回复
错了.是from GoodsBean
forestking_xx 2008-02-22
  • 打赏
  • 举报
回复
你取出goodsBean以后在同一个transaction中调用了Hibernate.initialize吗?
还有一个办法,就是使用Hql或者Criteria,比如:from GOODSBEAN_TABLE goodsBean left jion fetch goodsBean.ub
你试试看
luoxiang2000 2008-02-22
  • 打赏
  • 举报
回复
Hibernate.initialize(goodsBean.getUd())这个我早就试过了,不起作用。我的session不关也是这样
forestking_xx 2008-02-22
  • 打赏
  • 举报
回复
initialize也必须在transaction中被调用。
forestking_xx 2008-02-22
  • 打赏
  • 举报
回复
这个问题是因为hibernate在去除GoodsBean对应的userbean时并不是取出真正的userBean,甚至就不是userBean,也不是他的子类,而是他动态生成的proxy,这个就是为什么处产生classCastException的原因。prxoy只包含id。在transaction里调用其他属性,可以得到一个初始化后的实例。
有以下几个办法可以试试:
1 用String id = goodsbena.getUb().getId();然后用这个id去真正正的get()一个UserBean.
2 Hibernate 提供了一个静态方法初始化,比如Hibernate.initialize(goodsBean.getUd());以后就可以正常使用了。
luoxiang2000 2008-02-22
  • 打赏
  • 举报
回复
可是如果我不用懒加载,也就是lazy=false,hibernate会直接返回SuperUserBean1对象阿
老紫竹 2008-02-22
  • 打赏
  • 举报
回复
实际对应的不是一个UserBean用户,而是SuperUserBean1或者 SuperUserBean2

你是怎么保证的?这取决于你的数据库结构了。 hibernate 在重新从数据库读取数据的时候,只会生成UserBean, 他可不知道你要的是1,还是2
老紫竹 2008-02-22
  • 打赏
  • 举报
回复
UserBean 里面根本就没有 xxx1 和 xxx2

而且父类不能转化为子类,所以你的问题没办法解决,谁让你用 UserBean父类呢!

另,既然你的GoodsBean只关心UserBean, 你为何要xxx1和xxx2呢,这是自相矛盾的设计!

把xxx1和xxx2 放到 UseBean里面算了。
内容概要:本文介绍了一个基于Java与Vue的中小银行信贷材料结构化审核与尽调要点抽取系统的设计与实现。系统通过OCR识别、版面解析、关键字段抽取、实体归一化、规则引擎和风险评分等技术,将非结构化的信贷材料(如营业执照、审计报告、银行流水、合同等)转化为可查询、可校验的结构化数据,实现材料自动分类、字段提取、完整性检查、跨文档一致性比对及风险线索识别。系统涵盖文件接入、文档识别、字段抽取、规则校验、风险评分与前端交互六大层次,提升了信贷审核效率、统一了审查标准、增强了风险预警能力,并建立了可追溯的数据资产体系。文中还提供了企业名称清洗、统一社会信用代码校验、金额抽取、材料完整性校验、名称相似度计算和风险评分等核心功能的模型描述与Java代码示例。; 适合人群:具备Java和Vue开发基础,从事金融科技、信贷系统开发或智能文档处理相关工作的研发人员,尤其是关注OCR、NLP与规则引擎在金融风控中应用的工程师和技术负责人。; 使用场景及目标:① 实现中小银行信贷材料的自动化结构化处理与智能审核;② 提升信贷审批效率,降低人工核验成本;③ 统一尽调标准,增强风险识别与预警能力;④ 构建可追溯、可审计的信贷数据资产,支持贷后管理与监管合规。; 阅读建议:此资源以实际项目为导向,结合业务需求与技术实现,建议开发者结合代码示例深入理解各模块设计逻辑,重点关注实体归一化、规则引擎配置与前后端协同机制,并可在类似场景中复用核心算法与架构设计。
鼎拨神器 4.02 软件描述 ====================== 一、软件简介 鼎拨神器是一款面向拨号场景的桌面工具软件,提供账号批量拨号、拨号状态管理、日志留痕等功能,适用于需要频繁切换拨号账号的使用场景。软件界面简洁、操作直观,账号配置与管理一体化,开箱即用。 二、核心功能 1. 账号拨号:支持多账号配置,账号与密码以"空格或 Tab 键"分隔,可从表格(一列账号、一列密码)直接复制粘贴导入,批量管理、快速切换。 2. 动态等待:拨号成功后支持 1-60 秒动态等待时长,可有效规避连续拨号过快导致的失败,提升拨号成功率。 3. 流量选项:内置流量模式选项(4.0 版本新增),按需选择,灵活适配不同拨号需求。 4. 日志留痕: - dial_log.xls:最近一次拨号记录; - dial_log_日期.txt:全部拨号记录,按天归档,方便追溯与统计。 5. 图标美化:4.02 版本窗口左上角与任务栏统一应用专属图标,界面更规范。 三、版本更新记录 - 版本 4.02:修复了一些已知问题,优化窗口图标显示。 四、目录结构说明 - 鼎拨神器.exe:主程序,双击启动。 - Launcher_ForExe.exe:拨号调度启动器。 - Program 文件夹:软件内部文件,请勿删除。 - Program\dial.exe:核心拨号组件。 - accounts.txt:账号密码配置文件(账号与密码间用一个空格或 Tab 键隔开)。如不慎删除,请以"accounts.txt"命名自建文件即可恢复使用。 - rz 文件夹:日志文件夹,自动生成拨号记录。 建议每次拨号时将最后一个账号设为自己固有的账号,避免前面所有账号拨号不成功。 详细条款请参阅软件包内《软件使用授权及免责声明》。

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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