【问题标题】:JPA when the database is modified externally外部修改数据库时的 JPA
【发布时间】:2012-03-18 02:47:57
【问题描述】:

我有一个带有两个表的数据库的简单网络应用程序。

管理员可以直接从 SQL 脚本手动修改第一个表(例如使用 PHPMyAdmin),我的网络应用程序应该在此编辑后将一些数据写入第二个表。

我可以吗?

【问题讨论】:

  • 是否要将数据存储到两个表中?
  • 我已将数据预加载到第一个表中。当用户编辑数据(插入、删除或更新)时,我的应用程序应该在第二个表中写入一行。

标签: java database jakarta-ee jpa


【解决方案1】:

您可以使用@PrePersist 注解: http://docs.oracle.com/javaee/5/api/javax/persistence/PrePersist.html

 public final class SampleBusinessProcess {

    @PrePersist
    private void preperist(final MyObject obj) {
      entityManager.store(new Object2());
    }

 }

如果第一个实体被修改,这会将第二个实体存储到另一个表中。

编辑: 触发器无法启动 JPA 代码。这不是 JPA 的一部分。

Oracle 数据库中的触发器可以将一段 Java 代码作为 java 触发器启动。

我假设您使用的是 mysql 数据库,因此您必须在数据库级别创建一个触发器和一个计时器服务,该服务将轮询第二个表以进行更改。

【讨论】:

  • 好的,但这只有在我直接从我的应用程序中更改数据时才有效。如果我从第三方应用程序更改一行,则此方法不起作用。
  • 那么你必须在你的数据库中创建一个触发器。
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 2012-07-06
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
相关资源
最近更新 更多