Запись перезаписи JPA с первичным ключом auto_increment - PullRequest
0 голосов
/ 06 ноября 2018

Я искал, но ничего не нашел для меня. У меня есть класс сущности, как этот возлюбленный:

@Entity
public class Report {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;
    @Column(name = "descrizione")
    private String descrizione = null;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }   
}

И таблица в MySQL DB с auto_increment рк. Но я не знаю, почему auto_increment работает только при запуске веб-службы. Позже hibernate просто перезаписывает последнюю запись, не создавая новую с автоинкрементным первичным ключом.

В application.properties у меня есть эта конфигурация:

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/civicsense?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=AAAAAAA

Будет признательна за помощь

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Во-первых, измените свой int на Long. И вы можете опустить стратегию, поскольку для MySQL GenerationType.IDENTITY совпадает с GenerationType.AUTO, что эквивалентно просто добавлению @GeneratedValue.

@Id @GeneratedValue
private Long id;

Кроме того, ваша проблема может заключаться в том, как вы добавляете свою сущность. Возможно, вы захотите использовать saveAndFlush() в этом случае, так как изменения будут немедленно сброшены в БД в этой команде, что может предотвратить вашу проблему, потому что ваш фактический метод может не выполняться вовремя.

0 голосов
/ 06 ноября 2018

Вам необходимо изменить:
@GeneratedValue(strategy = GenerationType.IDENTITY)
для
@GeneratedValue(strategy = GenerationType.AUTO)

и в application.properties используйте:
spring.jpa.hibernate.ddl-auto=update

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