最近做mongodb版本升级,springboot版本从1.4.0.RELEASE升级到1.5.10.RELEASE后出现jpa使用save()方法保存数据后id为0的问题。

解决:

以下为原代码,使用监听器,继承 AbstractMongoEventListener ,重写其中的onBeforeConvert方法来处理自增功能

public void onBeforeConvert(final Object source) {
if (source != null) {
ReflectionUtils.doWithFields(source.getClass(), new ReflectionUtils.FieldCallback() {
@Override
public void doWith(java.lang.reflect.Field paramField) throws IllegalAccessException {
ReflectionUtils.makeAccessible(paramField);
if (paramField.isAnnotationPresent(GeneratedValue.class)) {
paramField.set(source, getNextId(source.getClass().getSimpleName()));
}
}
});
}
}

将原代码onBeforeConvert方法修改如下:

@Override
public void onBeforeConvert(BeforeConvertEvent<Object> event) {
if (event != null) {
Object source = event.getSource();
if (source != null) {
ReflectionUtils.doWithFields(source.getClass(), new ReflectionUtils.FieldCallback() {
@Override
public void doWith(java.lang.reflect.Field paramField) throws IllegalAccessException {
ReflectionUtils.makeAccessible(paramField);
if (paramField.isAnnotationPresent(GeneratedValue.class)) {
paramField.set(source, getNextId(source.getClass().getSimpleName()));
}
}
});
}
}
}

原因:

查看源码后发现AbstractMongoEventListener类中的onBeforeConvert(E source)方法已弃用,新的是onBeforeConvert(BeforeConvertEvent<E> event)

springboot+mongodb+jpa使用save()方法保存数据后id为0的更多相关文章

  1. thinkphp save()方法没有数据,保存失败解决办法

    thinkphp save()方法没有数据保存返回0,保存失败返回false   可以对返回值判断一下就好 $ret = $model->save($data); //var_dump($ret ...

  2. phalcon的save方法保存失败?

    phalcon的save方法保存失败? 因为表中设置了一个字段:disabled, 默认值是1, 在创建数据的时候,disabled没有传值过去,导致save方法一直是false, 当返回false时 ...

  3. CakePHP采用model的save方法更新数据所需查询

    采用model的save方法更新数据所需查询 1. 验证时候要确认是update 或者 create,以便使用对应规则 public $validate = array( 'field_name' = ...

  4. 删除mssqlserver表数据,使id从0开始

    ********************************* 注意备份好数据! *************************** 1.删除表数据 delete 表名 2.执行 dbcc c ...

  5. 数据库存入数据后id保持不变,或者直接报错

    数据库存入数据后id保持不变,且添加的数据一直在进行覆盖 或者直接报错 数据库存入数据后id保持不变,且添加的数据一直在进行覆盖 原因是: 之前注释掉了loadimage();在该函数中含有建立新的记 ...

  6. grails框架中在使用domain的save方法保存时保存不成功

    1.如果报错,自行根据异常查找错误,这里不说明 2.如果为报错,我遇到的就是domain中的字段属性与数据库中为同步 (1)你的domain是新的,在增加新的字段属性时未使用update更新数据库,造 ...

  7. 【开发笔记】- grails框架中在使用domain的save方法保存时保存不成功

    1.如果报错,自行根据异常查找错误,这里不说明 2.如果为报错,我遇到的就是domain中的字段属性与数据库中为同步 (1)你的domain是新的,在增加新的字段属性时未使用update更新数据库,造 ...

  8. 万水千山ABP - 单租户时,成功保存数据后,数据不显示

    问题描述: ABP 禁用了多租户,在编辑一个实体记录后,能成功地保存数据,但数据列表中看不到这条记录.打开数据表查看,发现该实体记录的 TenantId 字段值成了 Null , 而不是预期的默认租户 ...

  9. Nhibernet Get方法获取数据后,修改字段,未保存,但是数据库的数据却同步了

    首先,对象是在session中取得的,所以这个对象已经和数据库同步了,或者说相关联了如果你的session中的对象发生变法,提交事务后,数据库中的数据也会更新未保存更改,不要以为session就不会在 ...

  10. springboot mongodb jpa常用方法整理

    官方文档https://docs.spring.io/spring-data/data-mongodb/docs/current/reference/html/index.html 查询: ***** ...

随机推荐

  1. biancheng-Spring Boot框架

    目录http://c.biancheng.net/spring_boot/ 1Spring Boot是什么2创建Spring Boot项目3Spring Boot starter4YAML5Sprin ...

  2. a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false

  3. Windows下使用Bat拷贝远程共享目录下文件

    哈喽   我又来了 客户昨天提出了一个要求,这次的update里要用bat脚本去拷贝远程共享目录下的文件到各自的本地C盘目录下,于是乎,从昨天下午开始研究 到了今天中午,写写删删,乱改一气,总算弄出来 ...

  4. 数据库中的WITH temp_a 类似临时表的使用-CTE表达式

    个人随笔记录 当一个表的数据量过大时,在字段没有索引的情况下,查询的效率通常都会比较慢,如何能在不改变当前表结构的情况下让查询效率提升呢? 在一次偶然的巧合中看见同事使用了一个未见过语句,后面通过百度 ...

  5. nginx 编译安装及配置解析

    一.编译安装 安装插件 安装需要的组件 yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel ...

  6. 基于deepseek模型知识库,Cherry Studio和AnythingLLM使用效果对比

    基于deepseek模型知识库,Cherry Studio和AnythingLLM使用效果对比 目       录 1.      使用效果对比基础 2.      Cherry Studio和Any ...

  7. 洛谷P1983 [NOIP2013 普及组] 车站分级 题解

    思路 由题可知,在一趟车次的区间内,停靠的站点的等级恒大于不停靠的站点. 因此,对于每一趟车次的区间,给所有停靠的站点向所有不停靠的站点两两连有向边,然后求图中最长的路径长度,就能得到答案. 实现 因 ...

  8. flutter-全局控制键盘收回和单独控制键盘收回

    局部控制键盘收回 import 'package:flutter/material.dart'; import 'package:TLDF/main.dart'; class KeyboardBack ...

  9. 安装mysql报错5.7.13-Table 'mysql.user' doesn't existFor more information

    临时写的一个小系统客户要求用mysql,所以下载一个来研究下.解压后开始配置my.ini 配置my.ini [mysql]# 设置mysql客户端默认字符集default-character-set= ...

  10. Github Copilot的使用方法和快捷键

    GitHub Copilot是一款由GitHub和OpenAI共同开发的代码智能补全工具,它使用机器学习模型来为你提供代码建议和自动完成,可以加快开发过程并提高代码质量.下面是使用GitHub Cop ...