Как изменить таблицу, изменив сущность в JPA с помощью auto-ddl = update - PullRequest
0 голосов
/ 03 ноября 2018

Я изменил сущность UserInfoEntity, имя переменной с 'moblie' на 'mobile', а затем перезапустил свой сервер. когда я посмотрел на стол, то обнаружил, что в таблице не удален столбец 'moblie'. Вот мое изменение в сущности;

Из этого;

@Entity
@Table(name = "pe_userinfo")
public class UserInfoEntity {
    private String moblie;
}

к этому;

@Entity
@Table(name = "pe_userinfo")
public class UserInfoEntity {
    private String mobile;
}

Ответы [ 2 ]

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

Используйте auto-ddl=create-drop, чтобы полностью удалить неисправную схему и воссоздать ее с фиксированным значением столбца, таким образом вы не сможете обновить схему.

Также отметьте Hibernate: hbm2ddl.auto = update in production? , как говорится, лучше обрабатывать такие случаи вручную, а не использовать Hibernate для обработки таких изменений в существующей схеме.

Дополнительная идея

Если вы хотите сохранить свои данные;

  • Вы можете создать отдельную таблицу для хранения ваших данных pe_userinfo_temp
  • разверните ваш продукт, auto-ddl создаст pe_userinfo_temp
  • используйте логику jpa для копирования данных из pe_userinfo -> pe_userinfo-temp
  • сбросить таблицу pe_userinfo вручную из источника данных
  • исправьте ваш столбец в pe_userinfo, auto-ddl создаст его, но будет пустым
  • использовать аналогичную логику jpa для копирования данных из pe_userinfo_temp -> new pe_userinfo
  • затем, наконец, удалите pe_userinfo_temp из исходного кода и удалите из источника данных
0 голосов
/ 03 ноября 2018

Я предполагаю, что вы используете hibernate (может быть даже внутри spring-data-jpa), и на самом деле он не изменяет таблицы, а создает новые. Более того, вы не должны использовать (спящий режим) автообновление в более или менее серьезных условиях.

Используйте взамен пролет или жидкость .

...