【发布时间】:2023-03-16 13:43:01
【问题描述】:
我正在使用 java、jpa(eclipselink)、mysql 开发具有“共享数据库/单独模式”方法的多租户 Web 应用程序。我的持久性文件如下所示:
<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);
它工作正常,直到我在任何实体中添加任何新的持久性列。
就像我有一个实体 UserAccount,我在其中添加了一个新列“字符串出租信息”:
@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'
那么在这种方法中添加新列(扩展表)的解决方案是什么?
【问题讨论】:
标签: java jpa eclipselink multi-tenant