Spring-boot+JPA+Hibernate项目修改数据库MySQL为Oracle出现的问题

7 篇文章 0 订阅

从Github上fork一个论坛项目,原本数据库用的MySQL,本地项目使用的Oracle。修改过程和出现的几个问题,做一下记录。

1.第一步当然是修改maven的POM依赖,删除MySQL的依赖,加入oracle的依赖。本地maven使用的阿里云的仓库,好像跟maven的中央仓库内容不是很一致,就是中央仓库有的,阿里库里没有。所以注意要跟阿里库一致。

2.改完依赖,编译之后开始尝试启动项目。再启动项目之前,要先在oracle上面创建表空间,创建用户,分配用户在表空间上的各种权限;在启动过程中先后出现:建session权限;建表权限;建序列,查询序列权限;表空间扩展权限等;然后是oracle字段类型与MySQL差异出现的问题,主要是text和varchar2的转换;mysql中可以用date关键字做字段名,oracle中不可以,我统一在后面加了1,变成date1。

3.数据库的问题解决后,hibernate的问题,

No property date found for type RememberMeToken! Did you mean 'date1'?

搜了几个半天没有靠谱的解释,最后点开一个英文的链接,一个外国熊弟给出了原因:修改了字段的属性名后,对应方法里面引用的变量名也要修改。比如本来属性原来是username,有个方法名是deleteByUsername,如果username变成username1了,对应方法也要改为deleteByUsername1.

其实这些规则在JPA的规范里面都有,如果从头学的应该不会掉坑,半道乱入的遇到了就会比较迷惑。

4.第一次登陆没有问题,关掉浏览器再打开就报了空指针异常。堆栈信息里没有定位到项目代码里,真是头皮发麻。没办法硬着头皮找,看到是remeberMe这个功能,项目中使用了spring-security实现了权限控制功能,其中有一个记住我的功能。记录了一个用户token在数据库中,每次登陆根据数据库中存的时间,来判断token是否过期。控制台最后输出一条查询语句,一查发现里面有个date1的字段是空的。有门!打开相关代码一行一行看,找到保存token的service层,用到了spring-beans下的beanUtil.copyProperties方法。是把另外spring-security里一个token对象复制到remeberMeToken这个对象里,点进去一看,tmd,人家里面是date,我这里面是date1,好吧,再加一行代码重新赋值。重启,搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值