JPA中的实体类可以使用以下注解来定义查询语句:
- @NamedQuery:定义命名查询。通过查询名称在代码中引用查询。
- @NamedNativeQuery:定义命名的原生SQL查询。
- @Query:在实体类上定义查询。
- @NamedStoredProcedureQuery:定义存储过程查询。
- @NamedEntityGraph:定义实体图,用于加载关联实体数据。
- @Cacheable:定义查询结果缓存配置。
代码示例:
// 命名查询
@Entity
@NamedQuery(name = "User.findByName",
query = "from User u where u.name = ?1")
public class User {
...
}
// 查询
@Entity
@Query("from User u where u.email = ?1")
public class User {
...
}
// 存储过程
@Entity
@NamedStoredProcedureQuery(
name = "User.delete",
procedureName = "delete_user",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "id", type = Long.class)
}
)
public class User {
...
}
// 实体图
@Entity
@NamedEntityGraph(name = "User.allProperties",
attributeNodes = {
@NamedAttributeNode("emails"),
@NamedAttributeNode("address")
}
)
public class User {
...
}