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