Я разрабатываю многопользовательское веб-приложение с использованием подхода «Общие базы данных/отдельные схемы» с использованием java, jpa (eclipselink), mysql. Мой файл живучесть выглядит следующим образом:Как добавить отсутствующие столбцы в многопользовательском веб-приложении на основе нескольких схем, используя eclipselink
<persistence-unit name="GroupBuilderPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/?"/>
<property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>
<--- Here goes other properties definition -->
</persistence-unit>
Теперь вот мой EntityMangerFactory и EntityManager:
emfForTenant = Persistence.createEntityManagerFactory("GroupBuilderPU");
EntityManager em = emfForTenant.createEntityManager();
em.setProperty("eclipselink.tenant-id", schemaNameAsTenantId);
Сво работает отлично до тех пор пока я добавляю любой новый столбец настойчивость в любой организации.
Как меня есть Entity UserAccount где я добавил новый столбец «Строка rentalinfo»:
@Entity
@Multitenant(MultitenantType.TABLE_PER_TENANT)
@TenantTableDiscriminator(type = TenantTableDiscriminatorType.SCHEMA, contextProperty = PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT)
public class UserAccount implements Serializable {
...
private String rentalinfo;//Newly added column
...
}
Теперь после того, что следующая строка дает ошибку:
em.createQuery("SELECT ua FROM UserAccount ua").getResultList();
ошибка:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'RENTALINFO' in 'field list'
Итак, каким будет решение для добавления нового столбца (расширение таблицы) в этом приложении плотва?
Yeap, я знаю, что генерация ddl не поддерживается для MultitenantType.Table_PER_TENANT. Кстати, решение состоит в том, чтобы использовать любой инструмент миграции db, такой как flyway, Liquibase и т. Д. Я использую пролет для решения :) –
@FarhanNazmul ah Я предположил, что вы искали решение, в котором EclipseLink расширяет ваши таблицы. тогда да, решение было бы просто расширить таблицу самостоятельно или с помощью инструмента ... рад, что вы все это разработали. –