繁体   English   中英

无法在 spring 引导中保留 MEDIUMTEXT 类型字段

[英]unable to persist MEDIUMTEXT type field in spring boot

我有一个名为“值”的字段,它在 MySQL 数据库中属于 MEDIUMTEXT 类型。 当我尝试持久化或获取 model 时,它显示Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction

Model

@Entity
@Table(name = "xyz_something")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Xyz {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private int id;

 @NotBlank(message = "key is mandatory")
 @Column(columnDefinition = "CHAR")
 @Type(type = "org.hibernate.type.CharArrayType")
 private char[] key;

 @Column(columnDefinition = "MEDIUMTEXT")
 @Type(type = "org.hibernate.type.TextType")
 private String value;
 // Getters and Setters

存储库

public interface XyzRepository extends JpaRepository<Xyz, Integer> {
}

Controller

@RestController()
@RequestMapping("api/v1")
public class XyzController {
    private static Logger logger = LogManager.getLogger();

    @Autowired
    XyzRepository xyzRepository;


    @PutMapping("/xyz")
    public HttpStatus insertValue(@RequestHeader(value="id") int id, @NotBlank @RequestBody String value) {
        return upsert(value,id);
       return HttpStatus.BAD_REQUEST;
    }

 private HttpStatus upsert(String value, int id) {
        return xyzRepository.findById(id)
                .map(xyz -> {
                    xyz
                    .setKey("key")
                    .setValue(value);
                    xyzRepository.save(xyz);
                    return HttpStatus.CREATED;
                }).orElseGet(() -> {
                    Xyz xyz = new Xyz();
                    xyz
                    .setId(id)
                    .setKey("key")
                    .setValue(value)
                    xyzRepository.save(xyz);
                    return HttpStatus.CREATED;
                });
    }
}

如果我注释掉“setValue(value)”行,它会起作用,否则我会收到上面提到的错误。 我尝试将@Lob 与 columnDefinition = "MEDIUMTEXT" 一起使用。 另外,我尝试将长度放在@Column 中,但效果不佳。 我做错了什么? 提前致谢。

这是因为您使用的是保留关键字 MySQL 即“key”。 您需要在字段'key'声明上方使用@Column(name = "\"key\"") 对其进行map。 您可以参考此处了解有关保留关键字的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM