【问题标题】:Spring Roo - Bypass HibernateSpring Roo - 绕过休眠
【发布时间】:2014-03-04 01:24:42
【问题描述】:

我有一个使用 PostgreSQL 和 Hibernate 的 Spring/Roo 应用程序。

根据情况,连接信息位于数据库属性文件中

src/main/resources/META-INF/spring/database.properties

不幸的是,我有一种情况,通过 Hibernate 查询数据库会消耗太多资源。我确信我可以从上面列出的文件中提取数据库信息(url/用户名/密码),但我不确定从哪里开始搜索。

是否有手册或其他我可以找到这些信息的地方?

【问题讨论】:

    标签: java hibernate postgresql spring-mvc


    【解决方案1】:

    如果您希望绕过 Hibernate 以手动编写更高效的查询,则不必建立单独的连接,也不应该这样做。

    获取一个 Hibernate 会话并展开它以获取底层 java.sql.Connection。或者通过 Hibernate 自己的接口使用原生 SQL。

    这样您仍然可以使用 Hibernate 的有用部分,例如连接池集成。与 Hibernate 共享相同的连接池将提高效率,如果您这样做,您将有 很多 更少的额外代码。

    我没用过Spring Roo,所以不能具体说。 Here's info for Hibernate used via JPA 或 here。对于有 Session 对象的直接 Hibernate 使用,请在旧版本的 Hibernate 上使用 Session.connection(),或者在新版本上使用 Work 接口:

    如果您仍然坚持手动执行此操作,请从 ClassLoader.getResource(...) 开始。

    【讨论】:

    • 感谢您的帮助。我确实尝试了您提供的链接,但您是对的,效率不值得额外头痛。
    • @chora 有时它令人难以置信值得头疼,特别是在使用底层数据库引擎的本机功能可以以更智能和更有效的方式编写查询的情况下。如果您只是想减少每个查询的开销,那么不,这通常是不值得的,而且您会通过使查询更智能获得更好的结果 - 设置操作查询而不是循环查询等。
    • 考虑到我正在使用 Spring/Roo/Hibernate 应用程序..您是在谈论将“@Transactional(readOnly = true)”放在函数的开头......是吗?跨度>
    • @chora。不,我的意思是做更少的智能查询。
    • 明白了。我已经在这样做了。我已经创建了几个物化视图以使查询运行得更快。非常感谢您的意见和有用的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2014-02-02
    • 1970-01-01
    • 2012-07-30
    • 2020-11-13
    • 2012-08-02
    • 2012-01-02
    相关资源
    最近更新 更多