Отключить автообновление весной данных jpa

0

У меня есть класс JPA @Entity. Я извлекаю объект, используя один из методов jpa findBy который JPA будет рассматривать в persistent state, затем я обновляю некоторые из полей в сущности, а затем передаю объект для проверки. Если проверка не удалась, не обновляйте, если проверка завершается успешно, а затем сохраняйте объект.

Вот основная проблема с этим потоком: поскольку я обновил объект для его использования в валидации, неважно, буду ли я вызывать save(), запись всегда будет обновляться, поскольку JPA обнаруживает, что объект был изменен и флаги для обновления.

Как избежать такого поведения?

Класс My Entity

@Entity
@Table( name = "user" )
@Data
@EqualsAndHashCode( of = { "id" } )
@ToString( of = { "id" } )
public class UserModel {

@Id
@GeneratedValue( strategy = GenerationType.AUTO )
@Column( name = "u_id" )
private Long id;

@Column( name = "u_first_name" )
private String firstName;

@Column( name = "u_last_name" )
private String lastName;

@Column( name = "u_email_id" )
private String emailId;

@Column( name = "u_password" )
private String password;

@Column( name = "u_mobile_number" )
private String mobileNumber;

@Column( name = "u_created_at" )
private Calendar createdAt;

@Column( name = "u_is_active" )
private Boolean isActive;
}
  • 0
    Не видя ваш код (особенно участвующие в JPA сущности + классы, связанные с демаркацией транзакций), никто не сможет вам помочь.
  • 0
    Не могли бы вы использовать аннотации проверки компонентов на объектах? baeldung.com/javax-validation
Показать ещё 4 комментария
Теги:
spring-boot
spring-data-jpa

1 ответ

0

Я вижу два варианта:

  1. Когда валидация не удаляет объект из EntityManager.

    Убедитесь, что вы используете соответствующие каскадные аннотации или вручную перебираете все объекты, которым требуется отсоединить.

  2. @Transactional все обновление и проверку в отдельном режиме, то есть в методе без аннотации @Transactional. Таким образом, только когда вы явно вызываете сохранение, информация будет сохранена.

    Это может быть немного просто, чтобы получить право, но имеет недостаток загрузки всех затронутых объектов дважды.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню