我在java中的添加方法中,添加角色名称,如下图:
参数中,get到了上一个方法中的id,在这里就是user_id, 在该表中,不是自增的,以及role_id(这个没问题,可以略过)
这个流程在mysql环境下执行,很顺利,但是在oracle环境下,在最后一步:
mybatisplus的保存方法,执行后直接报错:
然后我找到了一个帖子,猜测可能跟oracle的自增有关,因为我没有写一句话: useGeneratedKeys="false"
但是该帖子,是在xml或者dao中写的,而我用的是mybatisplus自带的方法,所以不知道该往哪里写,所以想问一下各位,该如何下手
,下面是这个帖子的链接
https://blog.csdn.net/u013709087/article/details/100705211?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165537184816781432997413%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165537184816781432997413&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-100705211-null-null.142^v17^control,157^v14^new_3&utm_term=+useGeneratedKeys%3Dfalse&spm=1018.2226.3001.4187
以上纯属我的猜测,如果各位有其他的想法,可以在下方留言,明天我来了会一一查看的,谢谢
在实体类的id上加上这个注解试试
@TableId(type = IdType.AUTO)
private Long id;
----------------------------新方案-------------------------
由于 Oracle 不像 SQL Server 和 MySQL 有主键自增的设计,需要用创建序列或者触发器的方式实现主键增长,使用 Mybatis 时可以直接在 SQL 语句中使用序列,如果我们使用 Mybatis Plus 的通用 Mapper ,不自己写 SQL,这种情况下要实现主键自增就需要做一些额外的配置了:
1. 在application.yml 配置文件中增加
mybatis-plus:
global-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 0
# Sequence序列接口实现类配置
key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
2. 实体类增加 @KeySequence 注解,@TableId 增加 type = IdType.INPUT
@Data
@Accessors(chain = true)
@TableName("yjk_user")
@KeySequence(value = "SEQ_YJK_USER", clazz = Integer.class)
public class User extends Model<User> {
private static final long serialVersionUID = 1L;
@TableId(value = "user_id", type = IdType.INPUT)
private Integer userId;
@TableField("phone_number")
private String phoneNumber;
@TableField("password")
private String password;
}
其中 @KeySequence 注解中的 value 值为你创建的对应这张表的序列名,clazz 的值是和表的主键类型对应的,如果表的主键是varchar2 类型但是需要从 sequence 中取值,可以直接将 clazz 的值设为 String.class
还要注意 type = Idtype.Input 一定不能用 type = Idtype.Auto