gpt4 book ai didi

java - MySQL 截断不正确的 DOUBLE 值 : 'string' in Java Spring Repository

转载 作者:行者123 更新时间:2023-11-29 07:21:12 25 4
gpt4 key购买 nike

我们目前正在为类(class)开发一个用户管理系统,我们编写了一个后端 spring 应用程序,将密码、姓名、电子邮件和角色保存在 mysql 数据库中。

我们在更新用户表中的行时遇到问题。错误是

SQLException:截断不正确的 DOUBLE 值:'test@test.de'

test@test.de 是一个字符串,在数据库中保存为varchar (1024)。在 Spring 中,我们有一个实体类,其中电子邮件显然也作为字符串声明。查询是来自 CrudRepository 的标准 save() 方法。

//编辑

看来,这是mysql内部的问题。我通过 HeidiSQL 登录数据库并尝试手动更改任何值,但我遇到了同样的错误。

以下是 mysql 表:

用户 user table

作用 Role table

角色用户 role_user table

用户实体类:

@Entity
@Table(name = "user")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
@Column(name = "Name")
private String name;
@Column(name = "Email")
private String email;
@Column(name = "Password")
private String password;

@Transient
@JsonInclude
private List<RoleEntity> roles;
...(Getter and Setter Methods) ...

更新方法位于 @Service 类中,并从 @RestController HttpRequest 方法中调用。我不认为,rest Controller 或 CrudRepository 有问题,因为 RestController 只是调用这个函数而 CrudRepository 是空的。

服务更新方法:

 /**
* Edits the user with the provided userid, but only those,
* which are not null.
*
* @param entity UserEntity containg to be edited informations, will override roles.
* @return Error if to be edited params are wrong or new userEntity.
*/
public ResponseEntity editUser(UserEntity entity) {

Optional<UserEntity> userEntityOptional = userRepository.findById(entity.getId());
if (userEntityOptional.isPresent() == false) {
return new ResponseEntity(new ErrorResponse("Invalid userid"), HttpStatus.BAD_REQUEST);
}

//check if all parameters are

UserEntity toBeEdited = userEntityOptional.get();
if(entity.getEmail() != null){
toBeEdited.setEmail(entity.getEmail());
//return new ResponseEntity(new ErrorResponse("No email modification allowed"), HttpStatus.BAD_REQUEST);
}
if (entity.getName() != null) {
if (entity.getName().length() < 2) {
return new ResponseEntity(new ErrorResponse("Name too short"), HttpStatus.BAD_REQUEST);
}
toBeEdited.setName(entity.getName());
}
if (entity.getPassword() != null) {
if (entity.getPassword().length() < 8) {
return new ResponseEntity(new ErrorResponse("Password too short"), HttpStatus.BAD_REQUEST);
}
toBeEdited.setPassword(BCrypt.hashpw(entity.getPassword(), BCrypt.gensalt()));
}
if (entity.getRoles() != null) {
// Create list for user to role mapping.
List<RoleUserEntity> roleUserEntities = new ArrayList<>();
for (RoleEntity role : entity.getRoles()) {
RoleEntity roleEntity = roleRepository.findByRoleAndDomain(role.getRole(), role.getDomain());
if (roleEntity == null) {
// return error
return new ResponseEntity(new ErrorResponse("Role \"" + role.getRole() + "\" does not exist in domain \"" + role.getDomain() + "\""), HttpStatus.BAD_REQUEST);
}
RoleUserEntity roleUserEntity = new RoleUserEntity();
roleUserEntity.setRoleId(roleEntity.getId())
.setUserId(toBeEdited.getId());

roleUserEntities.add(roleUserEntity);

}
// Override all Userroles
roleUserRepository.deleteAllByUserId(toBeEdited.getId());

roleUserRepository.saveAll(roleUserEntities);
}

userRepository.save(toBeEdited);

// Get user for returning.
Optional<UserEntity> userEntityResponse = userRepository.findById(entity.getId());

return new ResponseEntity(createUserResponseWithMessage(userEntityResponse.get(), "User Edited"), HttpStatus.OK);
}

最佳答案

It seems like, this is a problem within mysql. I logged in via HeidiSQL on the database and tried changing any values manually, but I got the same error.

是的,这是 mysql 中的一个问题。另一个团队在此数据库中使用了触发器,当使用 UPDATE 命令时,它会在另一个数据库中创建额外的行。

这些触发器看起来像这样:

BEGIN
UPDATE otherdatabase.user
SET email = NEW.Email AND password = NEW.Password AND username = NEW.Name
WHERE id = OLD.ID;
END

这里的问题是 SET 短语中的 AND。在 SET 短语中,必须使用逗号代替 AND

另一个关于“不要让任何人弄乱你的数据库”的故事。

关于java - MySQL 截断不正确的 DOUBLE 值 : 'string' in Java Spring Repository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56299155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com