![](/img/trans.png)
[英]Persist “computed” field in JPA (plus Jackson) on Spring Boot application
[英]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
@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> {
}
@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.