0

我的问题是这个。生病尝试使它简单。我正在使用带有 mysql 的 spring data jpa +spring boot (hibernate config)。

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

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 对象时,我将其添加到映射 [storageMap] 并在程序期间从 storageMap 中读取的 A 对象及其 B 对象值字段(A 对象映射中的 B 对象)获取更新。

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

4

0 回答 0