假设在我现有的生产数据库中,我有一个学生表。大多数学生都是ex。学生,我想将其与当前学生分开。更具体地说,我想为当前注册的学生保留学生表,并将其他学生移动到 Students_history 表。与连接到学生的其他一些表类似。这样做的动机是希望将 (school_name, student_id) 作为主键,有时同一所学校会重新分配 student_id,因此对于某个 10 年前毕业的学生和另一个目前就读的学生,我将拥有相同的 student_id。这个 student_id 是我无法控制的,它来自进入应用程序的数据。第二件事是我桌子上的许多操作会快得多,
我能找到的最佳解决方案包括在 Student 表上定义触发器,删除它们会将学生(以及引用学生条目的其他数据)移动到相应的 Student_history 表。我试图弄清楚的部分是如何让 Hibernate 使用它。我想在网络应用程序中显示两个表(学生和学生历史)中的条目,就像它目前正在工作一样。为了在 Web 界面中显示这些数据,我使用了 GWT,其中数据是通过以下方式获取的:
Criteria criteria = session.createCriteria(Students.class);
在 Web 应用程序中对项目进行排序和过滤时,使用标准非常有帮助。我尝试指定自定义查询进行加载,如下所示:
@Entity
@Table(name = "Students")
@Loader(namedQuery = "students")
@NamedNativeQuery(name = "students", query = "select * from students union all select * from students_history WHERE Id = ?", resultClass = Students.class)
查询之后是 Student 类的定义。这不起作用 - Hibernate 使用上述条件生成的查询不包括任何提及 students_history。
我正在使用 postgreSQL、Hibernate 4 和 Java 1.6。
我的问题是:
- 我在区分当前和老学生的正确轨道上吗?我的意思是在删除时使用帮助表和存储过程。
- Hibernate 条件可以与使用 @Loader 注释定义的自定义加载查询一起使用吗?我预计 Hibernate 将使用我的加载器查询作为标准的基础。如果这是可能的,任何代码片段或链接都将受到欢迎。