EclipseLink “пропускают и составляют таблицы” никакая добавленная колонка в унаследованном классе, declired в суперклассе с InheritanceType. TABLE_PER_CLASS

В уже существующем наследовании структуры таблицы я добавляю новый тип столбца (я сократил часть кода),

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Account {
    ......        

    @Column                           //already existed column 
    private String name;              //get/set also applied

    @Column(length=20)                //new added column 
    @Enumerated(EnumType.STRING)      //get/set also applied 
    private AccountType type; 

    ..........
}

@Entity
public User extends Account {
    ................                  //some other already existed fields
}

В моем persistence.xml файле я использую следующую политику стратегии для поколения DDL

property name="eclipselink.ddl-generation" value="drop-and-create-tables"

Когда поколение DDL обрабатывает новую добавленную колонку тип в Счет , таблица успешно составлена, НО для Пользователь стол, там не такой вид колонки вообще (стратегия - TABLE_PER_CLASS). Я зафиксировал это, когда я пропускаю базу данных и создал ее снова. После этого текущее поколение DLL было применено - тип в , Пользователь также добавляется как колонка. Кто-то "встреченный" таким видом проблемы? Я зафиксировал с со снижением, и создайте DB, но я не уверен, что это должно быть стратегией в тех же самых случаях в будущем, особенно для производственной DB

Спасибо, Симеон Анджелов

0
nl ja de

1 ответы

DDL generation is for development not production. The problem you are seeing is because when the table already exists, it cannot be created with the new field. Drop and create or the "create-or-extend-tables" feature will work if you are adding to the tables as described here http://wiki.eclipse.org/EclipseLink/DesignDocs/368365

3
добавлено
Привет Крис, Поскольку я вижу единственную вещь, которую я должен сделать, изменяет persistence.xml файл на <имущественное имя =, стоимость "eclipselink.ddl-поколения" = "создает или расширяет столы"/> <имущественное имя = "eclipselink.ddl-generation.output-mode" стоимость = "база данных"/>, Мой fie - тот же самый, ожидают стратегию поколения DDL. It' s пропускают и создают/, И в этом случае также область не была добавлена в расширенном классе. Я, понимают правильно по источнику, который вы посылаете мне, что я должен сделать только что вещь с persistence/.xml файлом?
добавлено автор Simeon Angelov, источник
Да, это и повторно развертывание приложения или требование emf.refreshMetadata (), чтобы заставить его перезагружать, как описано на этой почте stackoverflow.com/questions/13372213/… Вы могли бы также позволить EclipseLink, регистрирующемуся видеть то, что могло бы идти не так, как надо, как описано здесь wiki.eclipse.org/EclipseLink/Examples/JPA/Logging
добавлено автор Chris, источник
IDE и редакторы — русскоговорящее сообщество
IDE и редакторы — русскоговорящее сообщество
393 участник(ов)

Общаемся, сравниваем и помогаем друг другу решать задачи с продуктами JetBrains, VS Code, Atom, vim, Emacs, Sublime и т.д. Всё в одном месте, ведь каждый из них хорош по своему. См. также: @js_ru, @typescript_ru, @react_js, @nodejs_ru, @javascript_jobs