我目前正在学习弹簧数据,任何人都可以解释它们@NamedQuery
与@NamedNativeQuery
之间的区别以及何时使用它们?
我们可以在@NamedQuery
中使用本机SQL吗?
答案 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。