[main] ERROR hbm2ddl.SchemaUpdate - Unsuccessful: alter table

本文探讨了在尝试修改数据库表时遇到的SQL1585N错误,该错误提示系统临时表空间中没有足够的页大小。文章深入分析了此问题的原因,并为读者提供了可能的解决方案。

[main] ERROR hbm2ddl.SchemaUpdate  - Unsuccessful: alter table subject add column fee_id bigint

 

SQL1585N 不存在具有足够页大小的系统临时表空间 会导致上面的错误!!

Hibernate在执行`SchemaUpdate`时抛出`UnsupportedOperationException: Not supported by BasicDataSource`错误,通常是因为数据源不支持某些数据库操作,例如数据库连接池(如`BasicDataSource`)没有启用对模式更新的支持。 ### 问题原因分析 `BasicDataSource`是由Apache Commons DBCP提供的一个基础连接池实现,它在默认情况下不支持Hibernate的模式更新操作。模式更新(SchemaUpdate)需要底层数据源支持对数据库结构的修改权限,而`BasicDataSource`通常用于生产环境,其默认配置并不允许此类操作。 ### 解决方案 1. **切换到支持模式更新的数据源** 可以改用支持模式更新的数据库连接池,例如`HikariCP`或`C3P0`,这些连接池在Hibernate中表现更佳,且对模式更新支持良好。 示例配置(HikariCP): ```xml <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/> <property name="username" value="root"/> <property name="password" value="password"/> </bean> ``` 2. **检查`persistence.xml`与`spring.xml`中的数据源配置** 如果`persistence.xml`与`spring.xml`中都配置了数据库连接信息,可能会导致冲突。建议保留一个配置文件用于管理数据源,避免重复配置。 例如,可以注释掉`persistence.xml`中的数据库连接信息: ```xml <!-- <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mydb"/> --> <!-- <property name="javax.persistence.jdbc.user" value="root"/> --> <!-- <property name="javax.persistence.jdbc.password" value="password"/> --> ``` 3. **确保数据源配置正确并启用模式更新权限** 如果坚持使用`BasicDataSource`,需确保其配置允许模式更新,并且数据库用户拥有足够的权限执行DDL语句。 示例配置: ```xml <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> <property name="username" value="root"/> <property name="password" value="password"/> <property name="defaultAutoCommit" value="true"/> </bean> ``` 4. **调整Hibernate配置以禁用自动模式更新** 如果不需要自动更新模式,可以在`persistence.xml`或`hibernate.cfg.xml`中禁用该功能: ```xml <property name="hibernate.hbm2ddl.auto">none</property> ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值