У меня есть два поля в определенном классе в моем приложении, и мне нужно применить свойство с именем scale, например, преобразование.В этом случае то, что будет показано на экране, не соответствует значению базы данных.
@Entity
@TableGenerator(...)
public class Value implements Serializable {
@Id
@GeneratedValue(...)
private Integer id;
private Double start; //Field to apply and reverse scale
private Double end; //Field to apply and reverse scale
private Integer scale; //Scale that will be used...
//GETTERS and SETTERS...
Итак, у меня есть две ситуации:
- Мне нужно применитьмасштабирование при загрузке объекта;
- И мне нужно изменить масштаб при сохранении / объединении / сохранении объекта
Итак, я разработал два метода обратного вызова для этой цели:
@PrePersist
@PreUpdate
public void reverseScale() {
start = start * scale;
end = end * scale;
}
@PostPersist
@PostUpdate
@PostLoad
public void applyScale() {
start = start / scale;
end = end / scale;
}
Я знаю, что после загрузки объекта сущности все изменения в этой сущности будут управляться контекстом постоянства и автоматически обновляться в базе данных.Но в этом случае это проблема, я предполагал, что JPA будет запускать метод reverseScale (помеченный @PrePersist и @PreUpdate) только тогда, когда я на самом деле запускаю метод save, merge или persist из функции менеджера сущностей, но методвыполняется без выполнения функции менеджера сущностей, запускается сразу после загрузки списка объектов, возможно, из-за вызова какого-либо метода get или set.
Я пытался использовать стратегию AccessType, но не сделалработа:
@Access(AccessType.FIELD)
public class Value implements Serializable {
..
@Access(AccessType.PROPERTY)
public String getStart() {
return start;
}
Боюсь, что переходное поле будет моим решением, но я пытаюсь избежать этого к тому времени.Что я могу сделать в этом случае?Мне нужно, чтобы метод applyScale выполнялся только один раз, когда я загружаю объект из базы данных, и ровно один раз - метод reverseScale, когда я (по моей воле) запускаю некоторый метод сохранения или обновления из entityManager.
Можно ли "отсоединить"поле вместо целой сущности?Еще один момент - не ставить эту «ответственность» на мои дао или классы бизнес-правил.Отделить всю сущность не очень хороший выбор в моем случае.Спасибо!