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 – 它更快,类型安全,并可以显着简化我们的开发/维护/测试。
- hibernate锁定等待超时超时;
- Hibernate级联
- 使用PostgreSQL,为什么Hibernate / JPA不会创建级联约束?
- hibernate唯一密钥validation
- NoClassDefFoundError:org / aopalliance / intercept / MethodInterceptor
- Hibernate + Derby:不支持“BOOLEAN”和“INTEGER”之间的比较
- HibernateException:当’hibernate.dialect’未设置时,对DialectResolutionInfo的访问不能为null
- hibernate是否保留LinkedHashSet的顺序,如果是,如何?
- JPA:如何表达包含@ElementCollection列的唯一约束?