我目前的工作场所使用标准的Spring / Hibernate / JSP组合,通过XML为其Flex客户端提供内容。有许多方法可以访问数据,但最常见的方法是通过对数据库的直接SQL调用和手动转换为XML。
问题在于随着应用程序变得越来越大,SQL变得更加复杂并且难以维护。好像维护使用StringBuilders创建的SQL并不困难,现在更糟糕的是,使用许多if语句和循环动态构造SQL。
我知道通常正确的方法是使用Hibernate查询和实体获取项目。但是,在我们的一些请求中,结果无法映射到单个Hibernate实体,我担心需要使用直接SQL。
什么是正确的方法?有没有办法让动态SQL查询更清晰?有没有办法用Hibernate实体做到这一点?
我很抱歉这个问题的抽象性。我希望你有很好的投入;)
感谢您的评论!
答案 0 :(得分:3)
HQL支持获取多个实体的查询。也支持联接。例如:
SELECT new com.package.model.SearchResultEntry(product, price) FROM Product product,
IN(product.variantPrices) price WHERE ....
以上内容返回一个由两个实体组成的新(非实体!)对象 - 产品和价格。您还可以使用List
将不同的实体放在同一个结果中。
通过阅读this tutorial。
使用动态参数进行这些查询,并使用最合适的类将它们存储为@NamedQueries
答案 1 :(得分:2)
您可以考虑将一些SQL逻辑移动到数据库中并通过视图访问数据:这会产生自己的问题,当然(您现在在两个地方都有业务逻辑),但可能值得考虑。
答案 2 :(得分:0)
假设您无法在HQL中执行所需操作,请查看ibatis它将允许您使用特定的SQL查询和存储过程设置映射。它也将是您项目的另一个依赖项,所以也要考虑到这一点。