【问题标题】:Reporting for multi-tenant web app多租户 Web 应用的报告
【发布时间】:2009-07-13 08:37:49
【问题描述】:

我们有一个基于 Web 的多租户企业应用程序,使用 Hibernate over MySQL。我们将 Jasper 报告用于客户需要的任何报告,但现在我们还需要提供临时报告,以便用户可以运行自己的查询。

其他人是如何做到这一点的?

我认为我可以:

  1. 在 excel 或 xml 中提供完整的导出 我对实体进行水合的格式,以便将任何@ManyToOne 替换为该实体的toString()。这样一来,数据对用户来说实际上是有意义的,而不是一大堆外键 ID。

  2. 让他们针对数据库副本运行 SQL。确保每张桌子都有一个 TENANT_ID,让他们访问 数据库副本,但将 ID 附加到 每个查询都在幕后。我什至可以确保这个数据库副本中只有他们的数据。不过有点打败了整个多租户方法。

【问题讨论】:

    标签: hibernate web-applications reporting jasper-reports multi-tenant


    【解决方案1】:

    这些用户查询会有多复杂?任意 SQL?或者您可以通过使用 HQL 或 Criteria 来获得(我真正的意思是您将让用户在 UI 中定义某种 QBE,但您将成为构建实际查询的人)?在后一种情况下,过滤器也可能会有所帮助。

    除非查询结果总是简单的列表,否则我不会为 (1) 烦恼。您可以用 XML 表示层次结构/关系,但我怀疑您的用户会喜欢这一点,因为他们必须处理它。并且 toString() 方法几乎可以保证适得其反,因为不同的用户必然会对同一对象的不同渲染感兴趣(例如,如果您返回链接到 Bs 的 As 列表,user1 会希望 B.toString( ) 然后是用户 2)。

    (2) 如果您确实需要任意 SQL 查询,应该可以使用。根据您的数据库的复杂程度和您拥有的用户数量,您可以通过创建视图(每个用户)而不是实际的数据库副本来解决问题。

    【讨论】:

      【解决方案2】:

      我有同样的问题,并且正在考虑(很难)实现一个“隐藏”多租户的自定义 ODBC 驱动程序。查看 Data Direct OpenSDK ODBC...

      http://www.datadirect.com/products/odbc/index.ssp

      【讨论】:

        猜你喜欢
        • 2018-06-02
        • 1970-01-01
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 2020-05-08
        相关资源
        最近更新 更多