我的问题是这个。生病尝试使它简单。我正在使用带有 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 之前深度复制从数据库返回的内容会解决问题。还有其他更好的方法吗?)