JPA中可以使用NamedQuery和NativeQuery进行查询。
NamedQuery:
- 使用JPQL查询语言编写查询字符串。
- 在@NamedQuery注解或映射文件中定义查询。
- 能够进行实体及属性级别的安全查询。
- 跨数据库平台。
代码示例:
@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:
- 使用SQL查询语言编写查询字符串。
- 在@NamedNativeQuery注解或映射文件中定义查询。
- 可以使用数据库特有的功能,性能可能更高。
- 数据库依赖,不跨平台。
- 无法进行实体级别的安全查询,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();