Hibernate返回最后一次获取和修改后的对象而不是获取新对象

时间:2018-05-20 20:49:34

标签: hibernate spring-boot spring-data-jpa hibernate-cache dirty-checking

我的问题是这个。我试着让它变得简单。 我正在使用spring数据jpa + spring boot(hibernate config)和mysql。

我有一个这样的类(实体)。

public class A {

@EmbeddedId
Aid id;


 @OneToMany(fetch = FetchType.EAGER, mappedBy = "a")
    @OrderBy("order ASC")
    @MapKey(name = "b.bid")
    Map<String, B> b;

//id class
 @Embeddable
    public static class Aid implements Serializable {
        private String agent;
        private String id;
    }

//some other fields/methods

}

这里是其他课程

public class B {
    private Integer x;
    private String code;
    @Transient
    private String value;

    //B embedable id class goes here

}

注意 你可以假设所有缺少的注释/方法/ id都存在,这是完美的代码。我没有在这里添加这些以避免使问题复杂化。

这是我的问题。

当我从数据库中获取此A对象时,我将其添加到map [storageMap],并且在程序期间从StorageMap中的对象读取并且其B对象值字段(A对象的Map中的B对象)得到更新。

但我的问题是,当我从数据库再次获取A时,它会给我以前获取和脏(修改)的对象。但是我需要从数据库中获取新副本以重置所有修改。 hibernate不知道它的脏,因为它的@Transient?我怎么能解决这个问题。 (我知道如果我在添加到我的storageMap之前深度复制从数据库返回的内容将解决问题。还有其他更好的方法吗?)

0 个答案:

没有答案