1

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

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

我想我可以:

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

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

4

2 回答 2

1

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

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

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

于 2009-07-13T18:22:28.567 回答
0

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

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

于 2010-02-02T18:02:52.283 回答