Spring Data @NamedQuery和@NamedNativeQuery有什么区别?

时间:2018-03-18 06:41:32

标签: java spring spring-boot spring-data

我目前正在学习弹簧数据,任何人都可以解释它们@NamedQuery@NamedNativeQuery之间的区别以及何时使用它们? 我们可以在@NamedQuery中使用本机SQL吗?

2 个答案:

答案 0 :(得分:2)

@NamedQuery用于以JPQL编写查询,JPQL是JPA标准的标准查询语言。这是默认设置,您应该尽可能坚持这些查询,因为它们与您使用的确切DBMS无关。

另一方面,

@NamedNativeQuery用于编写可能特定于DBMS的本机查询(在SQL中)。

这是一种权衡。 @NamedQuery为您提供便携性,因为您坚持标准。 @NamedNativeQuery为您提供了灵活性,但您保留了标准,可能会失去便携性。如果您切换到另一个DBMS,您可能需要重写一些@NamedNativeQuery定义。

因此,如果确实有必要,我们应该只使用@NamedNativeQuery

答案 1 :(得分:1)

@NamedNativeQuery用于编写SQL查询,而@NamedQuery用于编写HQL查询。

因此,在您的情况下,要编写本机SQL查询,您需要@NamedNativeQuery

但是,请注意,编写本机SQL会降低应用程序的灵活性和可移植性的噩梦,因为您将应用程序绑定到仅适用于特定数据库。如果您完全确定不需要迁移到其他数据库,那么这可能不是您的主要关注点。否则,本机HQL优于原生SQL。