【问题标题】:How to use JPA @Column(unique = true) in a multi-tenant environment?如何在多租户环境中使用 JPA @Column(unique = true)?
【发布时间】:2011-10-10 19:31:24
【问题描述】:

我想将我的应用程序转换为使用共享表支持多租户(即每个表都有一个租户 ID)。显然,我不能再使用@Column(unique = true),因为它会强制所有租户的唯一性,这是我不想要的。

我正在使用带有 EclipseLink 的 Glassfish 3.1.1。有没有办法让@Column(unique = true) 强制每个租户(而不是每个表)唯一性。还是我必须在业务逻辑中强制执行?

【问题讨论】:

    标签: jakarta-ee jpa-2.0 eclipselink multi-tenant


    【解决方案1】:

    也可以在@Tableannotation 上指定唯一性约束,例如

    @Table(name = "USERS", uniqueConstraints = @UniqueConstraint(columnNames = {"TENANT_ID", "username"}))
    

    【讨论】:

      【解决方案2】:

      EclipseLink 支持使用自定义注释(@Multitenant@TenantDiscriminatorColumn@TenantDiscriminatorColumns)或eclipselink-orm.xml 文件中的等效属性的多租户,因为version 2.3.0EclipseLink wiki 中提供了有关如何使用此受支持功能的更多信息; associated screencast 可以在 Youtube 上找到。

      因此,我认为单独使用 @Unique 注释是完全不可能的。

      【讨论】:

      • 我之前看过EclipseLink中的多租户支持,但看起来它不支持在运行时添加租户。如果您查看截屏视频,您会发现每个租户的应用程序代码都是重复的。因此,我将通过将租户 ID 添加到每个列和查询中来手动实现多租户支持。你在 eclipselink 中尝试过多租户吗?
      • 除截屏视频外,我没有尝试过任何其他操作,但如果您仔细查看示例,您可以在运行时设置租户 ID (eclipselink.tenant-id),如果这就是您添加租户的意思在运行时。
      • 是的,原来你可以在运行时设置属性。
      猜你喜欢
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2013-02-28
      • 2017-10-23
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      相关资源
      最近更新 更多