моя проблема заключается в следующем.Я постараюсь сделать это просто.Я использую данные весны jpa + весенняя загрузка (конфигурация hibernate) с 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
}
Обратите внимание, что вы можете принять все отсутствующие аннотации / метод /Идентификатор есть, и это совершенно рабочий код.Я не добавил их сюда, чтобы не усложнять вопрос.
это мой вопрос.
когда я выбираю этот объект A из базы данных, я добавляю его в map [storageMap] иво время выполнения программы из объекта A, который находится в storageMap, прочитано и обновлено поле значения его объектов B (объект B в карте объекта A).
но моя проблема в том, что когда я снова получаю A из базы данных, он дает мне ранее извлеченный и грязный (модифицированный) объект.но мне нужно свежее копирование из базы данных, чтобы сбросить все модификации.hibernate не знает, что он грязный, потому что его @Transient?как я могу решить это.(Я знаю, что если я глубоко скопирую то, что возврат из базы данных перед добавлением в мой storageMap, решит проблему. Любой другой лучший способ сделать это?)