Hibernate возвращает последнюю выборку и измененный объект вместо получения новой - PullRequest
0 голосов
/ 20 мая 2018

моя проблема заключается в следующем.Я постараюсь сделать это просто.Я использую данные весны 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, решит проблему. Любой другой лучший способ сделать это?)

...