首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从我的审计表中删除条目?

如何从我的审计表中删除条目?
EN

Stack Overflow用户
提问于 2010-05-07 19:22:58
回答 4查看 8.9K关注 0票数 10

我目前正在使用Hibernate Envers。

如何在审计表中删除与要删除的实体相关的条目?我的实体与其他实体没有关系。

我想我必须在我的自定义侦听器的onPostDelete方法中做到这一点:

代码语言:javascript
运行
AI代码解释
复制
import org.hibernate.envers.event.AuditEventListener;
import org.hibernate.event.PostCollectionRecreateEvent;
import org.hibernate.event.PostDeleteEvent;
import org.hibernate.event.PostInsertEvent;
import org.hibernate.event.PostUpdateEvent;
import org.hibernate.event.PreCollectionRemoveEvent;
import org.hibernate.event.PreCollectionUpdateEvent;

public class MyListener extends AuditEventListener {

  ...
  @Override
  public void onPostDelete(PostDeleteEvent arg0) {
    // TODO Auto-generated method stub
    super.onPostDelete(arg0);
  }
  ...

}

我已经阅读了文档,论坛,许多东西,但我不能弄明白。也许这是不可能的,我不知道。

以前有没有人这样做过?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-11 18:46:24

好了,对于那些想知道的人,我已经完成了50%。

感谢Hibernate Envers的创造者Adam Warski,我引用他的话:

" id“是代表实体id的hibernate关键字,无论名称是什么;对于审计实体,id是复合的,称为"originalId”。尝试:

代码语言:javascript
运行
AI代码解释
复制
"delete from full.package.name.User_AUD u where u.originalId.id = :userid" 

但现在,我也想删除我的revinfo表中与audit表相关的条目。

如果有人有线索,请告诉我。

票数 4
EN

Stack Overflow用户

发布于 2014-04-20 15:20:11

这对我来说是完全有效的,并且不需要原生查询

代码语言:javascript
运行
AI代码解释
复制
AuditQuery aq = auditReader.createQuery()
                   .forRevisionsOfEntity( ErpEmploye.class, true, false);       
 aq.add( AuditEntity.id().eq( employe.getCodeId() ) );
 aq.add( AuditEntity.relatedId("period").eq( erpPeriod.getCodeId() ) );
 List result =  aq.getResultList();//parameters must be added, this call is required
 if (result.size()>0){
    Query query = (Query) PrivateAccessor.invokePrivateMethod( aq, "buildQuery", new Object[0]);
    String queryString = (String) PrivateAccessor.getPrivateField( query, "queryString", true );
    PrivateAccessor.setPrivateField( query, "queryString", queryString.replace("select e__ from", "delete from"), true );
    getDAO().executeQuery(query);//transaction required             
}
票数 3
EN

Stack Overflow用户

发布于 2017-11-01 02:05:36

如果想要通过ID清除修订,可以使用原生查询直接访问envers表。有两个表包含对修订的引用。假设您的audit表使用传统的_AUD后缀,那么您可以通过编程方式找到实体表名。

以下是用Kotlin编写的一些代码片段:

代码语言:javascript
运行
AI代码解释
复制
fun getAuditTableName(em: EntityManager, aClass: Class<*>): String {
    return getAuditTableName(em, aClass.name) + "_AUD"
}

fun getEntityTableName(em: EntityManager, aClass: Class<*>): String {
    val session = em.unwrap(Session::class.java) as Session
    val sessionFactory = session.sessionFactory
    val hibernateMetadata = sessionFactory.getClassMetadata(className)
    val persister = hibernateMetadata as AbstractEntityPersister
    return persister.tableName
}

现在我们有了表名,我们可以删除表中的行。(将其放入JPA事务块中,根据需要替换内容,并为您的提供者调整SQL )。在给定MyEntityClass和myRevisionId的情况下,我们可以这样做:

代码语言:javascript
运行
AI代码解释
复制
    val em:EntityManager = getEntityManager()
    val auditTableName = getAuditTableName(MyEntityClass::class.java)

    em.createNativeQuery("delete from `$auditTableName` where REV=${myRevisionId}").executeUpdate()
    em.createNativeQuery("delete from REVINFO where REV=${myRevisionId}").executeUpdate()

如果您想通过revisionID以外的参数删除,只需在entity_AUD表中查询revisionIds,然后按上述方式删除找到的行即可。

请记住,一个revisionId可能与多个实体相关联,并且在前面的方法中将删除所有条目。要删除单个实体的修订,您需要该实体的ID和实体的键字段名。

下面是动态获取字段名的代码:

代码语言:javascript
运行
AI代码解释
复制
fun getEntityKeyNames(em: EntityManager, entityClass: Class<*>): List<String> {
    val session = em.unwrap(Session::class.java) as Session
    val sessionFactory = session.sessionFactory
    val hibernateMetadata = sessionFactory.getClassMetadata(entityClass.name)
    val persister = hibernateMetadata as AbstractEntityPersister
    return persister.keyColumnNames.toList()
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2791148

复制
相关文章
js通过input框输入属性和值,改变div的属性
js实现在input框里面输入属性和值,页面的 div的属性根据输入的属性和值进行变化。
王小婷
2019/03/04
15.9K0
js通过input框输入属性和值,改变div的属性
@JsonSerialize 使用:注解方式 实现条件判断属性值、条件修改属性值
预期效果为:当查到属性值为 1 时,就给序列化后的 json 中性别字段赋值为 “男” , 0 则 ”女“ 。
微风-- 轻许--
2022/04/13
3K0
@JsonSerialize 使用:注解方式 实现条件判断属性值、条件修改属性值
Java使用JAXB对XML设置属性和属性值
复杂点的原因是名称带有冒号,属性也是,没有操作过JAXB是不容易上手,我来记录下实体的代码。
高久峰
2023/10/12
6380
MFC中使用COleVariant获取CMFCPropertyGridProperty属性窗口某个属性值
  获取MFC属性窗口CMFCPropertyGridProperty中某个item的值时,如果不小心写错了类型,就会导致获取的结果不正确,原因就是COleVariant其实继承自一个特殊的结构体tagVARIANT。
全栈程序员站长
2022/09/09
1.8K0
html5div居中属性,html怎样让div居中
内容 ”标签让div居中;2、在div中加入“margin:0 auto属性;”自动调节居中。
全栈程序员站长
2022/11/15
4.6K0
html5div居中属性,html怎样让div居中
transition属性值
transition-property是用来指定当元素其中一个属性改变时执行transition效果,其主要有以下几个值:none(没有属性改变);all(所有属性改变)这个也是其默认值;indent(元素属性名)。当其值为none时,transition马上停止执行,当指定为all时,则元素产生任何属性值变化时都将执行transition效果,ident是可以指定元素的某一个属性值。其对应的类型如下:
全栈程序员站长
2022/11/17
1.6K0
transition属性值
@RequestParam使用defaultValue属性设置默认值
@RequestParam使用defaultValue属性设置默认值 注意设置必须是string类型的,框架自己会做转换 @RequestParam(value = "page", required = false, defaultValue = "1") Integer page, @RequestParam(value = "size", required = false) Integer size,
kirin
2020/12/08
4.1K0
swift中使用runtime修改属性值
swift中使用runtime修改属性值 Swift中的@objc和dynamic关键字 在OC中继承自NSObject的类都遵循runtime, 那么纯粹的Swift类呢? 如果在swift中想使
用户6094182
2019/08/23
2.5K0
反射获取属性字段及属性值
上篇文章我们可以通过自己的类加载器加载指定类了,在获取指定类后我们需要拿到类属性名称及类属性的值。 获取属性字段: public static List<Field> getFields(String
春哥大魔王
2018/07/23
4.4K0
反射获取属性字段及属性值
jQuery 文本属性值
jQuery的文本属性值常见操作有三种:html() / text() / val() ; 分别对应JS中的 innerHTML 、innerText 和 value 属性。
星辰_大海
2020/10/09
2.6K0
jQuery 文本属性值
jQuery 文本属性值
​ jQuery的文本属性值常见操作有三种:html() / text() / val() ; 分别对应JS中的 innerHTML 、innerText 和 value 属性。
梨涡浅笑
2022/05/08
3.1K0
jQuery 文本属性值
jQuery的文本属性值常见操作有三种:html() / text() / val() ; 分别对应JS中的 innerHTML 、innerText 和 value 属性。
清出于兰
2020/10/26
1.8K0
computed计算属性值是函数的监控的数据
computed 页面重新渲染时,不会重复计算,而 watch 会重新计算,所以 computed 性能更高些。
用户7365393
2021/10/06
9670
Flex反射得到属性和属性的值
       今天要写一个生成json的方法,目的是将VO对象中的所有公共属性和值转换成一个json对象,这个类中20多个属性,手动拼的话,是个体力活,并且有其它的对象也要转成json,还要手动拼,脑袋里最先想到的就是反射。
高爽
2022/05/07
1.7K0
display属性值有哪些_验证控件display属性
<html> <head> <meta charset=”utf-8″> <title>W3Cschool教程(w3cschool.cn)</title> <style> #main { width: 70px; height: 300px; border: 1px solid #c3c3c3; display: -webkit-flex; display: flex; /* 设置flex布局*/ -webkit-flex-wrap: wrap; flex-wrap: wrap;/*换行*/ -webkit-align-content: center; align-content: center; /*垂直对齐*/ }
全栈程序员站长
2022/11/01
2.3K0
display属性值有哪些_验证控件display属性
java 反射机制--根据属性名获取属性值
1.考虑安全访问范围内的属性,没有权限访问到的属性不读取 [java] view plain copy /**      * 根据属性名获取属性值      *       * @param fieldName      * @param object      * @return      */   private String getFieldValueByFieldName(String fieldName, Object object) {   try {              Fiel
庞小明
2018/07/06
5.4K0
input的属性值_input标签常用的属性
大家好,又见面了,我是你们的朋友全栈君。 <input name=”txtPwd” type=”password” maxlength=”20″ id=”txtPwd” class=”lg_input” οnpaste=”return false;” οncοntextmenu=”return false;” οncοpy=”return false;” oncut=”return false;”>
全栈程序员站长
2022/09/21
4.4K0
Java反射,通过对象获取属性及属性值
在工作中,我们有时候会有很多重复的东西,唯一不一样的,可能就是对象不同,取字段什么的都是一样的。这个时候,就要不断的复制,然后修改对象。太狗屎了。那么有没有不用到处复制的呢?可以使用到Java反射来实现。
凯哥Java
2022/12/16
4.5K0
Java反射,通过对象获取属性及属性值
JNI:取得Java属性和设置Java属性值
可以使用GetObjectField来获取数组类型的属性。不过JNI提供了一系列方法获取数组的属性,后续介绍。
BUG弄潮儿
2022/03/08
2K0
点击加载更多

相似问题

搜索值( div )

11

搜索div值

32

多值数据属性值的搜索

14

如何使用微数据=“3”属性/值访问div所有的div?

25

Div使用dat筛选器属性进行搜索

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档