Eclipse Link Multitenancy无法正常工作。Eclipse Link Multitenancy无法正常工作
例实体(正由liquibase创建的模式):
@Entity
@Table(name = "ENTITIES")
@Multitenant(MultitenantType.SINGLE_TABLE)
@TenantDiscriminatorColumn(name = "TENANT_ID", contextProperty = "eclipselink.tenant-id")
public class EntityClass
要设置的实体管理我使用一个方面的多租户属性,如以下:
@Around("execution(* javax.persistence.EntityManagerFactory.*(..))")
public Object invocate(ProceedingJoinPoint joinPoint) throws Throwable {
final Object result = joinPoint.proceed();
if (result instanceof EntityManager) {
EntityManager em = (EntityManager) result;
final String tenantId = TenantContext.getCurrentTenantId();
LOG.debug("Set EntityManager property for tenant {}.", tenantId);
em.setProperty(EntityManagerProperties.MULTITENANT_PROPERTY_DEFAULT,
tenantId);
return em;
}
return result;
}
当我启动Spring Boot应用程序完美地工作。有在集成测试提供租户信息,我定义的注释:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AsTenant {
String value();
}
要绑定此值,我用一个TestExecutionListener
:
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
final Method testMethod = testContext.getTestMethod();
final AsTenant asTenantAnnotation = testMethod
.getAnnotation(AsTenant.class);
if (asTenantAnnotation != null) {
TenantContext.setCurrentTenantId(asTenantAnnotation.value());
}
}
通过调试,我可以明确地说,TestExectionListener
之前被调用任何EM都会创建并且该属性为EM设置正确。在将任何内容持久化到数据库时,Eclipse Link不会为该列设置值。
也许有人可以帮我解决这个问题,我不知道为什么EclipseLink Multitenancy不工作。