我们有一个使用Hibernate over MySQL的基于Web的多租户企业应用程序。我们将Jasper Reports用于客户需要的任何报告,但现在我们还需要提供临时报告,以便用户可以运行自己的查询。
其他人如何完成这项工作?
我想我可以:
在excel或xml中提供完整导出
格式,其中我实体水合,以便任何@ManyToOne
被该实体的toString()
替换。这样,数据实际上对用户有意义,而不是大量的外键ID。
让他们针对数据库副本运行SQL。确保每个表都有一个 TENANT_ID,让他们访问 数据库副本但附加ID 幕后的每一个问题。我甚至可以确保此数据库副本只包含其数据。尽管如此,有点打败了整个多租户方法。
答案 0 :(得分:1)
这些用户查询有多复杂?任意SQL?或者你可以通过使用HQL或Criteria来获得(我真正的意思是你会让用户在UI中定义某种QBE,但你会构建实际的查询)?在后一种情况下,过滤器也可能有所帮助。
除非查询结果始终是普通列表,否则我不会打扰(1)。您可以用XML表示层次结构/关系,但我怀疑您的用户是否会喜欢它,因为他们必须处理它。并且toString()方法几乎可以保证适得其反,因为不同的用户必然会对同一对象的不同呈现感兴趣(例如,如果返回与B链接的As列表,则user1会希望从B.toString获得不同的结果( )然后user2)。
如果你真的需要任意的SQL查询,(2)应该可以工作。根据您的数据库的复杂程度以及您拥有的用户数量,您可以创建视图(每个用户)而不是实际的数据库副本。
答案 1 :(得分:0)
我遇到了同样的问题,并且正在考虑(努力)实现一个“隐藏”多租户的自定义ODBC驱动程序。查看Data Direct OpenSDK ODBC ...