Java/hibernate : how to write DAO code for complex SQLs

标签 java sql hibernate orm

我目前的工作场所使用标准的 Spring/Hibernate/JSP 组合通过 XML 向其 Flex 客户端提供内容。访问数据的方式有很多种,但最普遍的方式是通过直接 SQL 调用数据库并手动转换为 XML。

问题在于,随着应用程序变得越来越大,SQL 变得更加复杂且难以维护。好像维护使用 StringBuilder 创建的 SQL 还不够困难,现在更糟糕的是,这些 SQL 是使用许多 if 语句和循环动态构建的。

我知道通常正确的方法是使用 Hibernate 查询和实体来获取项目。但是,在我们的某些请求中,结果无法映射到单个 Hibernate 实体,恐怕需要使用直接 SQL。

解决这个问题的正确方法是什么?有没有办法让动态sql查询更清晰?有没有办法用 Hibernate 实体来做到这一点?

对于这个问题的抽象性质,我深表歉意。尽管如此,我还是希望你有好的意见 ;)

感谢您的评论!

最佳答案

HQL 支持获取多个实体的查询。也支持加入。例如:

SELECT new com.package.model.SearchResultEntry(product, price) FROM Product product, 
    IN(product.variantPrices) price WHERE ....

上面的代码返回一个新的(非实体!)对象,它由两个实体组成——产品和价格。您还可以使用 List 来放置来自同一结果的不同实体。

this tutorial通读。

使用动态参数进行这些查询,并使用最合适的类将它们存储为@NamedQueries

关于Java/hibernate : how to write DAO code for complex SQLs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143219/

相关文章:

java - SQL 处理空日期

java - JPA - 创建临时主键

JavaFx ObservableSet 适配器

java - 我如何画元胞自动机

SQL Server 数据库名称引用

两个查询的SQL UNION,列名重复错误

spring - 在 application.yaml 中设置 hibernate.id.new_generator_mappings

java - 如何使用 Hibernate Annotations 在 Lob/Clob/tinyblob 上添加索引

Java运行cURL并返回网站页面结果

java - 适用于 Java 的 AWS 开发工具包是否在安全通道中与 S3 服务器通信?