java - Hibernate自定义删除策略

标签 java hibernate openjpa

我有一个项目最近从 OpenJPA 转换为 Hibernate。在替换特定于 OpenJPA 的配置部分时,我遇到了一个无法在 Hibernate 中复制的函数。

OpenJPA中,我们通过使用@Strategy注释实体并提供org.apache.openjpa.jdbc.meta的实例来执行自定义删除。 strats.AbstractStrategy。在 customDelete 方法中,我们调用单个共享存储过程并传递表名称、实体 ID 和执行操作的用户 ID,该过程将删除实体并创建审核日志条目.

在 Hibernate 中,我可以找到许多可用的钩子(Hook),但似乎没有一个提供相同的功能。我查看了以下内容:

  1. @SQLDelete(“客户删除查询”) - 此选项仅允许您访问 id,而不是表名称或用户 ID,因此每个类都自定义,但仍然缺少信息

  2. EntityListener 类 - 此选项告诉您已删除的实体,但需要深入了解实际涉及的表,并且超出了单个数据库操作的范围

是否还有其他与 OpenJPA 方法更匹配的选项,或者我最好的选择是使用 EntityLister 类并自己做繁重的工作来确定表名称?

最佳答案

如果您的持久性类有一个 DAO 对象,您可以在其中定义自定义数据库方法。下面是一个使用 HiberObjects 生成的 DAO 示例。可以通过删除@ generated 注释来根据需要定义生成的方法。

package de.cw.minifigfinder.dao;

import javax.persistence.EntityTransaction;

import de.cw.minifigfinder.model.UIValues;

/**
 * @generated
 */
public class UIValuesDAO {

private static final String ID = "MINIFIGFINDER";

/**
 * @generated
 */
public UIValuesDAO() {
}

/**
 * @generated
 */
private javax.persistence.EntityManager getSession() {
    return de.cw.minifigfinder.util.HibernateHelper.getInstance()
            .getEntityManager();
}

public Long create() {
    UIValues object = new UIValues();
    object.setValuesID(ID);
    if (object == null)
        throw new IllegalArgumentException("object");
    javax.persistence.EntityManager em = getSession();
    EntityTransaction tx = null;
    try {
        tx = em.getTransaction();
        tx.begin();
        em.persist(object);
        tx.commit();
    } catch (RuntimeException e) {
        if (tx != null)
            tx.rollback();
        throw e; // or display error message
    } finally {
        em.close();
    }
    return object.getId();
}


/**
 * @generated
 */
public void delete(de.cw.minifigfinder.model.UIValues object) {
    if (object == null)
        throw new IllegalArgumentException("object");
    getSession().remove(object);
}

}

关于java - Hibernate自定义删除策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517567/

相关文章:

java - 在 Android 开发者网站上使用蓝牙示例代码时出现错误

java - 替换由开始和结束索引点定义的子字符串?

Spring+JPA+DAO+Tomcat

jpa - EntityManager.find 仅在实体只有 id 字段时才有效(OpenJpa、Apache Tomee 1.7)

java - 准备语句因 DB2 SQL 错误而失败

java - Hibernate 无法创建唯一键约束

java - Hibernate 投影中的列别名

java - Hibernate createNativeQuery - 获取多个实体

java - JPA 中的 setMaxResults 与 fetch join 相结合

java - android.database.sqlite.SQLiteException : no such column: favorite1 (code 1)