如何定义 所有命名查询 在 一处 (像类)而不是写 命名查询 在顶部 实体类。
例如,我有一个基类。在这个类中,我可以定义所有命名查询。
基础程序
@Entity
@NamedQueries({
@NamedQuery(name="Student.findAll", query="SELECT s FROM Student s"),
@NamedQuery(name="Employee.findAll", query="SELECT e FROM Employee e")})
class Base {
}
假设现在我有两个实体,如学生和员工。现在我想从基类访问命名查询。是可以访问的。如果可能,那么如何。
class Employee {
}
class Student {
}
在员工类中,学生我想从基类访问命名查询。有可能的。如果可能的话,我如何访问。
最佳答案
我们在一个项目上做了类似的事情。我们有一个包含我们所有命名查询的实体,并且(正如@jimfromsa 已经说过的)您的代码可以在任何需要它们的地方访问它们,因为您使用它们的唯一名称来调用它们。
@Entity
@NamedQueries({
@NamedQuery(name="Student.findAll", query="SELECT s FROM Student s"),
@NamedQuery(name="Employee.findAll", query="SELECT e FROM Employee e"),
...
@NamedQuery(name="SomeEntity.someQuery", query="SELECT se FROM SomeEntity se")
})
public class NamedQueryHolder implements Serializable {
// entity needs to have an id
@Id
private Integer id;
// getter and setter for id
}
请注意,此实体不需要映射到现有表,只要您不在代码中的任何地方使用它。至少这种方法适用于 EclipseLink,从未在 Hibernate 中尝试过。
在你的情况下,如果你不想要这个额外的查询持有者实体,你可以把所有命名的查询放在
Base
中。类,它会起作用。但是,我认为从实体类访问命名查询不是一个好主意,它们被称为 POJO 是有原因的。再说一次,这完全是设计问题(看看 Anemic Domain Model )。
关于hibernate - 我们可以像某些属性文件一样在一个地方定义所有命名查询,而不是写在实体类中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838032/