Hibernate多个用户,动态变化

时间:2011-09-22 19:49:50

标签: java hibernate

技术上有两个问题,但紧密耦合:)

我在一个新项目中使用Hibernate。这是一个POS项目。 它使用Oracle数据库。

我们决定使用Hibernate,因为项目很大,并且因为它提供了(最受欢迎的)ORM功能。

目前,Spring是不可能的 - 原因是:该项目是一个Swing客户端 - 服务器应用程序,它增加了不必要的复杂性。而且,Spring应该非常渴望硬件资源。

有可能抛弃Hibernate并使用JDBC。为什么?项目要求是精确的数据库交互。这意味着,我们应该完全控制连接,会话和事务(并且,是的,与未经优化的查询一样低)。

第一个问题是 - 您对使用上述要求有何看法?

第二个问题围绕着Hibernate。

我们开发了一个简单的Hibernate试点项目。 另一个项目要求是 - 一个数据库用户/每个用户一个连接/每个用户一个会话/事务是灵活的(我们可以在我们想要的时候结束它们作为会话)多个用户可以同时登录该应用程序

我们得到了类似的东西。确切地说,我们在没有多个用户要求的情况下实现了完整描述的功能。

现在,查看可用资源,我得出结论,如果我们要在数据库上拥有多个用户(在同一架构上),我们最终将使用多个 SessionFactory ,实现用于新用户连接的动态 ConnectionProvider 。为什么呢?

用户散列密码位于数据库中,因此我们需要将用户动态添加到当前用户列表中。

第二个问题是 - 这可以做得更轻松一点,Hibernate不支持这样的配置似乎很奇怪。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您正在考虑使用Hibernate或JDBC的天气,请诚实地使用JDBC。如果您的域模型不是太复杂,那么使用hibernate并不会带来很多好处。另一方面,使用JDBC将极大地提高性能,因为您可以更好地控制查询,并且可以减少所有Hibernate开销,从而减少内存使用量。平衡这个我的模型尽可能详细的第一个scetch。如果你能够从一开始就对它进行全部描述(在整个项目中没有可能发生变化的部分),并且如果所述模型看起来不参与,那么JDBC将成为你的朋友。

关于你的用户和会话,我认为你可能会误会(因为它可能只是我),但我认为你不需要多个SessionFactories来拥有多个会话。 SessionFactory是一个重要的初始化对象,但是一旦你有了一个,你可以从中获得多个轻量级的hibernate会话对象。

作为最后的评论,如果你真的坚持使用ORM解决方案(无论出于何种原因),如果可能的话选择EclipseLink JPA2实现。 JPA2具有比hibernate更多的功能,而且Eclipselink实现比休眠更少。

答案 1 :(得分:0)

所以,就Hibernate而言,我仍然不知道动态更改数据库用户(更改数据库连接)的唯一方法是创建多个会话工厂,但我认为它是。

我们降低了我们的要求,并决定使用Hibernate,在数据库上只使用一个用户(一个连接),每个用户一个会话(多个会话/多个“逻辑”用户)。我们创建了几个Java类来包装该功能。可以找到here。{/ p>的资源

为什么我们最终会使用Hibernate?使用JDBC更精确,更灵活,但再次将ResultSet值映射到对象的努力也是相同的手动ORM方法

例如,如果我有一个需要保存页面的GUI,首先我必须获取所有页面文章,然后在保存页面后,将所有文章FK更新到该页面。请注意,我在名词(对象)中说话,我没有看到任何其他方式来包装页面/文章,除了使用全局状态。这是我不希望在我的应用程序中看到的一件事,毕竟我们使用的是Java,一种OO语言。

当我们已经有一个可以配置的ORM映射器(强制将在这个特定的例子中使用更精确的单词)来处理这些东西时,为什么要编程呢?

此外,我们决定使用谷歌Guice - 它更快,类型安全,并且可以显着简化我们的开发/维护/测试。