首页 > 解决方案 > 多租户 JPA EclipseLink 中的 @SequenceGenerator.schema

问题描述

我将 Eclipselink 与 @Multitenant 一起使用。除了@SequenceGenerator 之外,一切都很顺利

@Entity
@NamedQuery(name = "Ville.findAll", query = "SELECT v FROM Ville v")
@Multitenant(MultitenantType.TABLE_PER_TENANT)
@TenantTableDiscriminator(type=TenantTableDiscriminatorType.SCHEMA, contextProperty="tenant-id")
public class Ville implements Serializable {
    private static final long serialVersionUID = 1L;


@Id
@SequenceGenerator(name = "VILLE_IDVILLE_GENERATOR", sequenceName = "SEQ_ID_VILLE", allocationSize = 1, schema = ? )
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "VILLE_IDVILLE_GENERATOR")
private Integer idville;

我对注释属性 SequenceGenerator.schema 的值有疑问:

如果我不指定它,它将在默认模式中查找它并返回错误,因为它没有找到序列

看起来序列名称不遵循每个模式命名约定,所以在每个租户/模式系统上

如何使用 @Multitenant 对其进行配置以在活动租户 shema 中查找序列?

在本主题中,如何在多租户中设置 @SequenceGenerator 架构有:

我发现的简单方法是在每个事务开始时更新架构以适应当前租户 SET search_path TO 租户!我怎样才能做到这一点 ?我试过了 :

EntityManager.cretQuery("SET search_path TO 租户");

我得到这个错误:查询不是以有效标识符开头,必须是 SELECT、UPDATE 或 DELETE FROM。

标签: jpaeclipselinkmulti-tenantsequence-generators

解决方案


使用 createNativeQuery 而不是 createQuery。


推荐阅读