JPA中如何使用NamedQuery和NativeQuery?代码举例讲解

JPA中可以使用NamedQuery和NativeQuery进行查询。

NamedQuery:

  1. 使用JPQL查询语言编写查询字符串。
  2. 在@NamedQuery注解或映射文件中定义查询。
  3. 能够进行实体及属性级别的安全查询。
  4. 跨数据库平台。

代码示例:

@Entity
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
public class User { ... }
TypedQuery<User> query = em.createNamedQuery("User.findAll", User.class);
List<User> users = query.getResultList();

NativeQuery:

  1. 使用SQL查询语言编写查询字符串。
  2. 在@NamedNativeQuery注解或映射文件中定义查询。
  3. 可以使用数据库特有的功能,性能可能更高。
  4. 数据库依赖,不跨平台。
  5. 无法进行实体级别的安全查询,SQL注入风险较大。

代码示例:

@Entity  
@NamedNativeQuery(name = "User.findAll",  
    query = "SELECT * FROM USER",
    resultClass = User.class
)
public class User { ... }
Query query = em.createNamedQuery("User.findAll");
List<User> users = query.getResultList();