考虑一个需要实时搜索后备数据库的只读服务。该服务需要能够生成相当复杂的选择查询,以基于多表对象生成摘要、报告和结果。库/框架选择的优先级是(sql 的)性能、可维护性和寿命。
Hibernate - 似乎需要“技巧”才能让它生成正确的 SQL,Criteria API 看起来很有希望,但在任意查询方面也有一些限制。
MyBatis - 没有类似 Criteria 的 API,但它清晰干净,通常不需要 Hibernate 的技巧和技巧。有限的数据库抽象。
其他一些尚待评估的解决方案包括:SQLBuilder、Squiggle、Querydsl、JOOQ 或自定义解决方案。
SO 用户发现的内容最适合制作快速的多功能搜索服务。
[更新] -我在使用 Hibernate 时遇到的一些技巧和问题是......
- https://hibernate.onjira.com/browse/HHH-879
- https://hibernate.onjira.com/browse/HHH-5291
- 如何将 Where 子句应用于辅助表
- https://forum.hibernate.org/viewtopic.php?f=1&t=973514
一般来说,加入同一张表两次似乎会导致问题。我什至设法欺骗 hibernate 生成正确的 SQL 只是让它映射结果错误,因为它缓存了实体的第一个实例并假设来自第二个连接的列是多余的。通过注释表达的条件连接也很痛苦。并不是说这是不可能的,而是非常神秘且不直观。
为了回答下面的 X-Zero,我想从规范到结果。即,消费者告诉我他们知道什么,然后我构建一个查询来即时回答他们的问题。在实践中,我打算对它们可以传递的内容进行一些限制。