Hibernate多个用户,动态变化

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

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

我们决定使用Hibernate,因为项目很大,并且因为它提供了(最流行的)ORMfunction。

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

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

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

第二个问题围绕着Hibernate。

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

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

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

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

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

谢谢。

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

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

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

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

我们降低了我们的要求,并决定使用Hibernate,在数据库上只使用一个用户(一个连接),每个用户一个会话(多个会话/多个“逻辑”用户)。 我们创建了几个Java类来包装该function。 可以在此处找到如何完成此操作的资源。

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

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

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

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