@Transactional
@Override
public Result register(UserDto.RegisterDto registerDto) {
//逻辑校验
//参数校验
if (registerDto.getUsername() == null || registerDto.getPassword() == null) {
return Result.error(1, "用户信息不能为空");
}
//唯一性校验
if (this.userModel.getInfoByUsername(registerDto.getUsername()) != null) {
return Result.error(1, "用户已存在");
}
//dto 转 po
//po 注入依赖
User userData = this.converter.convert(registerDto, User.class); //dot 转 data
//密码加密
String encodedPwd = registerDto.getPassword();
encodedPwd = Md5Util.md5(encodedPwd);
registerDto.setPassword(encodedPwd);
//一级推广人
userData.setFirstLevelCommendUserId(registerDto.getInvitationCode());
//获取二级推广人id
Integer scendCode = this.userModel.getFirstLevelCommendUserId(registerDto.getInvitationCode());
userData.setSecondLevelCommendUserId(scendCode);
//获取三级推广人id
Integer thirdCode = this.userModel.getFirstLevelCommendUserId(scendCode);
userData.setThirdLevelCommendUserId(thirdCode);
//将用户信息存入数据库
this.save(userData);
User user = this.userModel.getInfoByUsername(userData.getUsername());
// 3. 生成JWT令牌
String token = jwtComponent.generateUserToken(user.getId());
// 4. 存储令牌到Redis(使用用户ID作为key)
String redisKey = "user_token:" + user.getId();
redisTemplate.opsForValue().set(redisKey, token, 7200, TimeUnit.SECONDS);
// 5. 准备响应数据
Map<String, Object> responseData = new HashMap<>();
responseData.put("token", token);
responseData.put("time", 7200);
return Result.success(responseData);
}package com.app.www.domain.po;
import com.app.www.domain.dto.UserDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import java.util.HashMap;
import java.util.Map;
/**
* po > 会员
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Entity
@AutoMappers({
@AutoMapper(target = UserDto.SaveDto.class),
@AutoMapper(target = UserDto.LoginDto.class),
@AutoMapper(target = UserDto.RegisterDto.class),
@AutoMapper(target = UserDto.UpdateIsPassDto.class),
@AutoMapper(target = UserDto.UpdatePasswordDto.class),
@AutoMapper(target = UserDto.UpdatePayPasswordDto.class),
@AutoMapper(target = UserDto.UpdateBalanceDto.class),
@AutoMapper(target = UserDto.UpdateConsumeVoucherDto.class),
})
public class User extends Base {
@Id
@TableId(type = IdType.AUTO)
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
// 用户名
@Size(max = 255)
@NotNull
@NotBlank(message = "用户名不能为空")
@ColumnDefault("''")
@Column(name = "username", nullable = false)
private String username;
// 密码
@NotNull
@ColumnDefault("")
@Column(name = "password", nullable = false)
private String password;
// 支付密码
@Column(name = "payPassword", nullable = false)
private String payPassword;
@NotNull
@ColumnDefault("0.00")
@Column(name = "balance", nullable = false, precision = 11, scale = 2)
private Float balance;
@NotNull
@ColumnDefault("0.0000")
@Column(name = "consumeVoucher", nullable = false, precision = 14, scale = 4)
private Float consumeVoucher;
@NotNull
@ColumnDefault("0.0000")
@Column(name = "union_voucher", nullable = false, precision = 14, scale = 4)
private Float unionVoucher;
@NotNull
@ColumnDefault("0.0000")
@Column(name = "lock_voucher", nullable = false, precision = 14, scale = 4)
private Float lockVoucher;
@JsonProperty("isPass")
@Column(name = "is_pass", nullable = false)
private Boolean isPass;
@NotNull
@ColumnDefault("0")
@Column(name = "first_level_commend_user_id", nullable = false)
private Integer firstLevelCommendUserId;
@NotNull
@ColumnDefault("0")
@Column(name = "second_level_commend_user_id", nullable = false)
private Integer secondLevelCommendUserId;
@NotNull
@ColumnDefault("0")
@Column(name = "third_level_commend_user_id", nullable = false)
private Integer thirdLevelCommendUserId;
@Column(name = "commend_user_ids", nullable = false)
@JdbcTypeCode(SqlTypes.JSON)
private Map<String, Object> commendUserIds;
}Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865]
JDBC Connection [HikariProxyConnection@864524395 wrapping com.mysql.cj.jdbc.ConnectionImpl@5258796e] will be managed by Spring
==> Preparing: SELECT t.id,t.username,t.password,t.pay_password,t.balance,t.consume_voucher,t.union_voucher,t.lock_voucher,t.is_pass,t.first_level_commend_user_id,t.second_level_commend_user_id,t.third_level_commend_user_id,t.commend_user_ids,t.create_time,t.update_time,t.delete_time FROM syh_user t WHERE t.delete_time=0 AND (t.username = ?) ORDER BY t.id DESC
==> Parameters: 推广人测试(String)
<== Total: 0
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865]
Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865] from current transaction
==> Preparing: SELECT t.id,t.username,t.password,t.pay_password,t.balance,t.consume_voucher,t.union_voucher,t.lock_voucher,t.is_pass,t.first_level_commend_user_id,t.second_level_commend_user_id,t.third_level_commend_user_id,t.commend_user_ids,t.create_time,t.update_time,t.delete_time FROM syh_user t WHERE t.delete_time=0 AND (t.id = ?) ORDER BY t.id DESC
==> Parameters: 5(Integer)
<== Columns: id, username, password, pay_password, balance, consume_voucher, union_voucher, lock_voucher, is_pass, first_level_commend_user_id, second_level_commend_user_id, third_level_commend_user_id, commend_user_ids, create_time, update_time, delete_time
<== Row: 5, gterd, 23, , 0.00, 0.0000, 0.0000, 0.0000, 1, 4, 0, 0, <<BLOB>>, 0, 1744710979, 0
<== Total: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865]
Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865] from current transaction
==> Preparing: SELECT t.id,t.username,t.password,t.pay_password,t.balance,t.consume_voucher,t.union_voucher,t.lock_voucher,t.is_pass,t.first_level_commend_user_id,t.second_level_commend_user_id,t.third_level_commend_user_id,t.commend_user_ids,t.create_time,t.update_time,t.delete_time FROM syh_user t WHERE t.delete_time=0 AND (t.id = ?) ORDER BY t.id DESC
==> Parameters: 4(Integer)
<== Columns: id, username, password, pay_password, balance, consume_voucher, union_voucher, lock_voucher, is_pass, first_level_commend_user_id, second_level_commend_user_id, third_level_commend_user_id, commend_user_ids, create_time, update_time, delete_time
<== Row: 4, 赵四, 18, , 0.00, 0.0000, 0.0000, 0.0000, 1, 3, 0, 0, <<BLOB>>, 0, 0, 0
<== Total: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865]
Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865] from current transaction
==> Preparing: INSERT INTO syh_user ( username, password, first_level_commend_user_id, second_level_commend_user_id, third_level_commend_user_id, create_time, update_time, delete_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 推广人测试(String), 456(String), 5(Integer), 4(Integer), 3(Integer), 1751271519(Long), 1751271519(Long), 0(Long)
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e9f7865]
2025-06-30T16:18:40.070+08:00 WARN 29312 --- [nio-8888-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.dao.DataIntegrityViolationException: <EOL><EOL>### Error updating database. Cause: java.sql.SQLException: Field 'commend_user_ids' doesn't have a default value<EOL><EOL>### The error may exist in com/app/www/mapper/UserMapper.java (best guess)<EOL><EOL>### The error may involve com.app.www.mapper.UserMapper.insert-Inline<EOL><EOL>### The error occurred while setting parameters<EOL><EOL>### SQL: INSERT INTO syh_user ( username, password, first_level_commend_user_id, second_level_commend_user_id, third_level_commend_user_id, create_time, update_time, delete_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )<EOL><EOL>### Cause: java.sql.SQLException: Field 'commend_user_ids' doesn't have a default value<EOL>; Field 'commend_user_ids' doesn't have a default value]
怎么解决,实现类应该怎么修改
最新发布