невозможно сохранить поле типа MEDIUMTEXT при весенней загрузке - PullRequest
1 голос
/ 05 мая 2020

У меня есть поле с именем 'значение', которое имеет тип MEDIUMTEXT в MySQL db. Когда я пытаюсь сохранить или получить модель, отображается 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, что тоже не работает. Что я делаю не так? Заранее спасибо.

1 Ответ

1 голос
/ 05 мая 2020

Это потому, что вы используете зарезервированное ключевое слово MySQL, то есть «ключ». Вам необходимо сопоставить его с помощью @Column (name = "\" key \ "") над объявлением поля 'key'. Вы можете обратиться к здесь для получения дополнительной информации о зарезервированных ключевых словах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...