栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Hibernate Envers在两个版本之间获取旧值和新值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Hibernate Envers在两个版本之间获取旧值和新值

因此,我想使生活更轻松的是创建一个注释,以标记我有兴趣比较的字段。没有,我最终不得不坚持命名对话,就像仅使用以’get’开头的方法一样。我发现这种方法有很多极端的情况。

注释。

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface AuditCompare {    public String name() default "";    public CompareType compareBy() default CompareType.string;    enum CompareType {        string, count    }}

像这样被使用

@Entity@Auditedpublic class Guideline {    .....    @AuditCompare    private String name;    @AuditCompare    private String owner;    @oneToMany(cascade = CascadeType.ALL, orphanRemoval=true, mappedBy="guideline")    private Set<GuidelineCheckListItem> checkListItems = new HashSet<GuidelineCheckListItem>();    .........}

由于envers将Set更改和Set的对象都审核为两个不同的事件,因此我不想比较是否更改了set。然后做比较,我有看起来像的方法

private void findMatchingValues(Object oldInstance, Object newInstance, ActivityEntry entry) {    try {        Class oldClass = oldInstance.getClass();        for (Field someField : oldClass.getDeclaredFields()) { if (someField.isAnnotationPresent(AuditCompare.class)) {     String name = someField.getAnnotation(AuditCompare.class).name();     name = name.equals("") ? someField.getName() : name;     Method method = oldClass.getDeclaredMethod(getGetterName(name));     if(someField.getAnnotation(AuditCompare.class).compareBy().equals(AuditCompare.CompareType.count)) {         int oldSize = getCollectionCount(oldInstance, method);         int newSize = getCollectionCount(newInstance, method);         if (oldSize != newSize) entry.addChangeEntry(name, oldSize, newSize);     } else {         Object oldValue = getObjectValue(oldInstance, method);         Object newValue = getObjectValue(newInstance, method);         if (!oldValue.equals(newValue)) entry.addChangeEntry(name, oldValue, newValue);     } }        }    } catch (NoSuchMethodException e) {        throw new RuntimeException(e);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399351.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号