Jpa 为什么要使用Querydsl?

Jpa 为什么要使用Querydsl?,jpa,jpql,querydsl,Jpa,Jpql,Querydsl,我是新来的JPA,JPQL,Hibernate,Querydsl,现在我看到在我的项目中使用Querydsl进行查询,我想知道为什么选择这种方法。因此,您可以确定为什么Querydsl会出现在我的项目中,但您可以告诉我为什么以及在什么情况下Querydsl是首选的。为什么我们可以使用简单的JPQL语句 您可以在IDE中使用代码完成 IDE重构工具起作用(或多或少) 类型安全 (几乎)语法安全 编译器在编译时生成错误类型的错误etc,而Hibernate在第一次运行时就抱怨 一致性,您可以使用相

我是新来的JPAJPQLHibernateQuerydsl,现在我看到在我的项目中使用Querydsl进行查询,我想知道为什么选择这种方法。因此,您可以确定为什么Querydsl会出现在我的项目中,但您可以告诉我为什么以及在什么情况下Querydsl是首选的。为什么我们可以使用简单的JPQL语句

  • 您可以在IDE中使用代码完成
  • IDE重构工具起作用(或多或少)
  • 类型安全
  • (几乎)语法安全
  • 编译器在编译时生成错误类型的错误etc,而Hibernate在第一次运行时就抱怨
  • 一致性,您可以使用相同的原则来查询JPA、MongoDB、集合

我想对QueryDSL的用法进行对比

我不喜欢使用QueryDSL,原因如下:

  • 您需要频繁编译项目,以维护更新的
    Q
  • 您需要<强>安装IDE <强>,以考虑在<代码>目标< /代码>中生成的<代码> Q>代码>类,作为正常类。
  • 我已经看到了IDE“get lost”,不再识别
    Q
  • 我已经创建了简单的QueryDSL语句,这些语句生成了非常奇怪且不可预测的SQL
即使对最终用户很友好,我也更喜欢使用JPQL,因为它更接近生成的SQL,并且更可预测


但与标准相比,我更喜欢QueryDSL。

因为它是一个比冗长的JPA标准更自然的API?如果重命名实体类属性,QueryDSL查询中的IDE重命名字段会吗?用户可以使用QueryDSL进行参数查询吗?必须从实体定义生成定义DSL类的查询。是的,您可以进行参数化查询。好的,Q类是基于实体生成的,但是在QeryDSL查询中使用实体属性,如果您更改实体属性,QClass将会更改,但是您在旧的DSL查询中使用的属性呢?例如,如果重命名实体类中的属性字段,它将被更改?IDE能处理这种变化吗?如果不是自动变化的,但至少它能彻底破坏构建,并且你能很快找到破坏的地方。你可以从@ikettu那里找到关于如何在Eclipse上设置项目的说明。为什么投反对票?上面提到的所有反对票都是由于缺乏关于如何正确设置项目以避免这些错误的知识造成的。我否决了你的答案,因为它与QuesryDSL是否正确无关。事实上,在第一点中有一个有效的论点。我在搜索,似乎从创建/更改JPA实体开始使用QueryDSL。生成代码并经常跟踪文件将是一件非常头疼的事情。