org.hibernate.util.JDBCExceptionReporter - 流已被关闭

org.hibernate.util.JDBCExceptionReporter - 流已被关闭,

 

这个问题很搞哈,我在一个erstudio的一张表中设了一字段aa是nclob的,另一个bb是也是nclob型,生成到orcla后就变成一个nclob一个long,用hibernate查时“org.hibernate.util.JDBCExceptionReporter - 流已被关闭”

 

 

把其中一个字段改成nvarchar就不再出现这样的问题,orcla的一个表不能有两个nclob

@SuppressWarnings("unchecked") @Override public List<OaCoopApprove> findDoneList(String userName) { Criteria criteria = this.getSession().createCriteria(OaCoopApprove.class, "a"); criteria.createAlias("oaWorkflowNode", "b", Criteria.INNER_JOIN); criteria.add(Restrictions.ne("b.type", ScpConstants.NUMBER_3)); criteria.add(Restrictions.eq("a.userName", userName)); criteria.add(Restrictions.sqlRestriction( "{alias}.workDate = (SELECT MAX(c.workDate) FROM OA_COOP_APPROVE c WHERE c.oaCoop_id = a.oaCoop_id AND c.userName = ?)", new Object[] { userName }, new Type[]{new StringType()} )); criteria.setFirstResult(0); criteria.setMaxResults(4); List<OaCoopApprove> list = criteria.list(); if (list != null && list.size() > 0) { return list; } return new ArrayList<OaCoopApprove>(); } Hibernate: select top 4 this_.id as id345_7_, this_.dataTablePath as dataTabl2_345_7_, this_.flag as flag345_7_, this_.oaCoop_id as oaCoop10_345_7_, this_.oaWorkflowNode_id as oaWorkf11_345_7_, this_.sight as sight345_7_, this_.userInfo as userInfo345_7_, this_.userName as userName345_7_, this_.workContent as workCont7_345_7_, this_.workDate as workDate345_7_, this_.workflowNodeName as workflow9_345_7_, oacoop3_.id as id344_0_, oacoop3_.attentionCode as attentio2_344_0_, oacoop3_.attentionMessage as attentio3_344_0_, oacoop3_.contentId as contentId344_0_, oacoop3_.oaDataTable_code as oaDataT14_344_0_, oacoop3_.oaDataTableType_typeCode as oaDataT15_344_0_, oacoop3_.oaWorkflowControl_id as oaWorkf16_344_0_, oacoop3_.startCompanyId as startCom5_344_0_, oacoop3_.startCompanyName as startCom6_344_0_, oacoop3_.startDate as startDate344_0_, oacoop3_.startWriter as startWri8_344_0_, oacoop3_.startWriterDepId as startWri9_344_0_, oacoop3_.startWriterDepName as startWr10_344_0_, oacoop3_.startWriterName as startWr11_344_0_, oacoop3_.status as status344_0_, oacoop3_.title as title344_0_, oadatatabl4_.code as code348_1_, oadatatabl4_.attribute as attribute348_1_, oadatatabl4_.classPath as classPath348_1_, oadatatabl4_.dataformtype as dataform4_348_1_, oadatatabl4_.eventClassPath as eventCla5_348_1_, oadatatabl4_.name as name348_1_, oadatatabl4_.oaDataTableType_typeCode as oaDataT10_348_1_, oadatatabl4_.pathName as pathName348_1_, oadatatabl4_.state as state348_1_, oadatatabl4_.usetype as usetype348_1_, oadatatabl5_.typeCode as typeCode349_2_, oadatatabl5_.state as state349_2_, oadatatabl5_.typeName as typeName349_2_, oadatatabl5_.usetype as usetype349_2_, oadatatabl6_.typeCode as typeCode349_3_, oadatatabl6_.state as state349_3_, oadatatabl6_.typeName as typeName349_3_, oadatatabl6_.usetype as usetype349_3_, oaworkflow7_.id as id357_4_, oaworkflow7_.account as account357_4_, oaworkflow7_.appusers as appusers357_4_, oaworkflow7_.belongCompany_id as belongC16_357_4_, oaworkflow7_.designBandFormId as designBa4_357_4_, oaworkflow7_.designBandFormTypeId as designBa5_357_4_, oaworkflow7_.designContent as designCo6_357_4_, oaworkflow7_.designFlowManageRole as designFl7_357_4_, oaworkflow7_.designGlobaVar as designGl8_357_4_, oaworkflow7_.designId as designId357_4_, oaworkflow7_.flowtype as flowtype357_4_, oaworkflow7_.illuminate as illuminate357_4_, oaworkflow7_.lastUpdate as lastUpdate357_4_, oaworkflow7_.name as name357_4_, oaworkflow7_.range as range357_4_, oaworkflow7_.status as status357_4_, b1_.id as id360_5_, b1_.agreePercent as agreePer2_360_5_, b1_.designId as designId360_5_, b1_.designate as designate360_5_, b1_.flowType as flowType360_5_, b1_.name as name360_5_, b1_.note as note360_5_, b1_.oaWorkflowControl_id as oaWorkf14_360_5_, b1_.position as position360_5_, b1_.signIsPublic as signIsPu9_360_5_, b1_.type as type360_5_, b1_.workManner as workManner360_5_, b1_.workSequence as workSeq12_360_5_, b1_.worker as worker360_5_, oaworkflow9_.id as id357_6_, oaworkflow9_.account as account357_6_, oaworkflow9_.appusers as appusers357_6_, oaworkflow9_.belongCompany_id as belongC16_357_6_, oaworkflow9_.designBandFormId as designBa4_357_6_, oaworkflow9_.designBandFormTypeId as designBa5_357_6_, oaworkflow9_.designContent as designCo6_357_6_, oaworkflow9_.designFlowManageRole as designFl7_357_6_, oaworkflow9_.designGlobaVar as designGl8_357_6_, oaworkflow9_.designId as designId357_6_, oaworkflow9_.flowtype as flowtype357_6_, oaworkflow9_.illuminate as illuminate357_6_, oaworkflow9_.lastUpdate as lastUpdate357_6_, oaworkflow9_.name as name357_6_, oaworkflow9_.range as range357_6_, oaworkflow9_.status as status357_6_ from OA_COOP_APPROVE this_ left outer join OA_COOP oacoop3_ on this_.oaCoop_id=oacoop3_.id left outer join OA_DATA_TABLE oadatatabl4_ on oacoop3_.oaDataTable_code=oadatatabl4_.code left outer join OA_DATA_TABLE_TYPE oadatatabl5_ on oadatatabl4_.oaDataTableType_typeCode=oadatatabl5_.typeCode left outer join OA_DATA_TABLE_TYPE oadatatabl6_ on oacoop3_.oaDataTableType_typeCode=oadatatabl6_.typeCode left outer join OA_WORKFLOW_CONTROL oaworkflow7_ on oacoop3_.oaWorkflowControl_id=oaworkflow7_.id inner join OA_WORKFLOW_NODE b1_ on this_.oaWorkflowNode_id=b1_.id left outer join OA_WORKFLOW_CONTROL oaworkflow9_ on b1_.oaWorkflowControl_id=oaworkflow9_.id where b1_.type<>? and this_.userName=? and this_.workDate = (SELECT MAX(c.workDate) FROM OA_COOP_APPROVE c WHERE c.oaCoop_id = a.oaCoop_id AND c.userName = ?) 2025-07-23 15:38:39,709 - org.hibernate.util.JDBCExceptionReporter -70462 [http-bio-8080-exec-7] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 4104, SQLState: S1000 2025-07-23 15:38:39,710 - org.hibernate.util.JDBCExceptionReporter -70463 [http-bio-8080-exec-7] ERROR org.hibernate.util.JDBCExceptionReporter - 无法绑定由多个部分组成的标识符 "a.oaCoop_id"。 2025-07-23 15:38:39,719 - 500.jsp -70472 [http-bio-8080-exec-7] ERROR 500.jsp - could not execute query org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) org.hibernate.loader.Loader.doList(Loader.java:2545) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) org.hibernate.loader.Loader.list(Loader.java:2271) org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119) org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716) org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347) com.bksuns.workflow.dao.impl.WorkflowOperateDAOImpl.findDoneList(WorkflowOperateDAOImpl.java:1201) com.bksuns.workflow.service.impl.WorkflowOperateServiceImpl.findDoneList(WorkflowOperateServiceImpl.java:2661) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
07-24
你提供的日志显示: ```log HHH000204: Processing PersistenceUnitInfo [name: default] Hibernate Core {5.3.7.Final} Using dialect: org.hibernate.dialect.MySQL5Dialect ``` ✅ **没有报错**,说明 JPA 和 Hibernate 已成功启动并连接到数据库。 ❌ **但数据库无数据**,说明实体未被持久化 —— 数据没有被插入。 --- ### 🔍 常见原因及解决方案 #### ✅ 1. 没有执行 `save()` 或事务未提交 即使你写了代码保存数据,如果: - 没调用 `repository.save(entity)` - 或方法不在 `@Transactional` 中 - 或服务类没加 `@Service` / 未被 Spring 管理 → 数据不会写入数据库。 ##### ✔️ 示例正确写法: ```java @Service public class UserService { @Autowired private UserRepository userRepository; @Transactional public void addUser() { User user = new User(); user.setUsername("dogsong"); user.setEmail("dogsong@example.com"); user.setPassword("123456"); userRepository.save(user); // 必须调用 save } } ``` 并在启动类或配置类中触发它: ```java @SpringBootApplication public class Application implements CommandLineRunner { @Autowired private UserService userService; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... args) throws Exception { userService.addUser(); // 启动时运行 } } ``` --- #### ✅ 2. 实体未启用 JPA 注解或未扫描到 确保你的实体上有正确的注解,并且在主类包路径下(或使用 `@EntityScan`)。 ```java @Entity @Table(name = "user") public class User { ... } ``` 如果你的实体在其他包中,需要显式扫描: ```java @EntityScan(basePackages = "com.dogsong.entity") // 自定义路径 @SpringBootApplication public class Application { ... } ``` --- #### ✅ 3. hbm2ddl.auto 设置为 none(默认),表存在但数据没插入 查看你的 `application.yml` 或 `application.properties`: ```yaml spring: jpa: hibernate: ddl-auto: validate # 只验证结构,不创建也不插入 # ddl-auto: update # 推荐开发时使用:自动建表(但不会插数据) ``` > ⚠️ `validate` 和 `none` 都不会自动插入数据!你必须手动调用 `save()`。 --- #### ✅ 4. 数据源配置错误:连了空数据库 确认你连接的是正确的数据库! 常见问题: - URL 写成了 `test`、`tmp` 或临时数据库 - 使用了内存数据库 H2 而不是 MySQL(尤其当你引入了 H2 依赖) 检查你的 `application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/liteflow_editor?useSSL=false&serverTimezone=UTC username: root password: your_password ``` 👉 确保 `liteflow_editor` 是你要操作的真实数据库,并且该库中有对应的表。 你可以登录 MySQL 验证: ```sql USE liteflow_editor; SHOW TABLES; SELECT * FROM user; ``` --- #### ✅ 5. 表名/字段名大小写或命名策略不匹配 比如 Java 字段是 `userName`,映射成数据库 `username` 还是 `user_name`? 建议明确指定列名: ```java @Column(name = "username", nullable = false) private String username; ``` 否则可能因命名策略导致字段无法识别。 --- #### ✅ 6. 开启 SQL 日志,确认是否有 INSERT 语句 添加以下配置,看是否真的执行了插入: ```yaml spring: jpa: show-sql: true format-sql: true properties: hibernate: format_sql: true logging: level: org.hibernate.SQL: DEBUG org.hibernate.type.descriptor.sql.BasicBinder: TRACE # 显示参数值 ``` ✅ 如果控制台输出类似: ```sql insert into user (email, password, username) values (?, ?, ?) ``` 但数据库仍无数据 → 可能是事务回滚或连接到了错误数据库。 ❌ 如果根本没有 `insert` 输出 → 说明你根本没调用 `save()`。 --- ### ✅ 总结排查步骤 | 步骤 | 操作 | |------|------| | 1 | 检查是否调用了 `repository.save(entity)` | | 2 | 检查服务类是否被 Spring 托管(加了 `@Service` 并被扫描) | | 3 | 添加 `CommandLineRunner` 在启动时插入测试数据 | | 4 | 打开 `show-sql: true` 和 `BasicBinder: TRACE` 查看是否发出 INSERT | | 5 | 核对 `datasource.url` 是否指向你期望的数据库 | | 6 | 登录数据库手动查询表内容 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值