我目前的工作场所使用标准的 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/