mysql - 监听数据库表更新/更改

标签 mysql sql database hibernate jakarta-ee

我是 Hibernate 新手。我正在使用 Java 和 Hibernate 开发后端服务。

我有一个 Student 实体,它与 Group 实体具有多对多关系。在数据库中,我有一个 student 表和一个 group 表:

@Entity
@Table(name = "student")
public class Student {
   private int student_id; //primary key

   @ManyToMany(mappedBy = "students")
   private Set<Group> groups = new HashSet<Group>();

   @ManyToMany(cascade = {CascadeType.ALL})
   @JoinTable(name="student_group",
           joinColumns={@JoinColumn(name="student_id")},
           inverseJoinColumns={@JoinColumn(name="group_id")})
   public Set<Group> getGroups() {
       return groups;
   }

   public void setGroups(Set<Group> groups) {
      this.groups = groups;
   }

   //Setter & Getter for student_id
   ...

}

正如你在上面的hibernate注释中看到的,数据库中有一个连接表student_group。我想要实现的是,当客户端的请求到达我的后端服务(带有学生ID)时,我想知道student_group是否连接数据库 已更新该学生,例如是否插入新行(新组)(分配给该学生)或是否已更新现有行的值。如果有这样的更新/更改,我会通知客户。

使用hibernate,如何实现这种监听器来监听数据库表中的更改/更新?

最佳答案

您可以通过编写插入和更新触发器来实现这一点。

可以在表级别创建触发器。它们与您使用的 ORM 框架无关。插入触发器可以配置为在插入之前触发。更新触发器可以配置为在更新之前或之后执行。以下链接提供了有关触发器的简要说明:

http://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_tr.htm

关于mysql - 监听数据库表更新/更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20634944/

相关文章:

mysql - SQL 过程参数

php - Mysql 上的导航栏?还是坏主意?

php - JOIN 和 COUNT 只输出一个结果

php - 如何优化数据加载速度

sql - 选择 A 列字符串中的任何单词与 B 列字符串中的任何单词匹配的位置

javascript - IndexedDB 在哪里?你如何使用它?

ios - 在多个线程中分离 SQLite 事务

java - Spark 流: How to efficiently save foreachRDD data into Mysql Database?

php - 循环遍历 MYSQL 查询的结果并将其插入表中

SQL Server 将 xml 值读取为空字符串