1

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

他人怎么做到这一点?

我想,我可以:

  1. 提供全面的出口在Excel或XML 格式,其中我滋润实体,从而使任何@ManyToOne被替换为实体的toString()。这将使数据对用户实际上有意义,而不是大量外键ID。

  2. 让他们对数据库副本运行SQL。确保每个表都有一个 TENANT_ID,让他们访问 数据库副本,但在后台幕后追加每个查询的ID到 。我甚至可以确保这个数据库副本只有他们的数据。尽管如此,还是有一些挫败了整个多租户方式。

回答

1

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

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

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