возможно ли querydsl вызвать событие jpa при обновлении некоторых данных? - PullRequest
0 голосов
/ 27 марта 2020

Привет, я разработал веб-сервер с Spring-boot и jpa, querydsl

Я новичок в jpa и querydsl, поэтому сначала получил несколько вопросов

, я создал BaseEntity с @ MappedSuperclass

у этой сущности есть id, @CreatedDate, @LastModifiedDate и некоторые другие ..... Как этот код

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity implements Serializable {

    private static final long serialVersionUID = 8119042465036032691L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Setter
    private Long id;

    @CreatedBy
    @Column(name = "createdBy", updatable = false)
    private Long createdBy;

    @LastModifiedBy
    private Long modifiedBy;

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;

}

и когда я вставляю, удаляю данные, я использовал spring-data-JPA. методы save (), delete ().

при обновлении выберите, затем работайте с querydsl

все работает нормально. но когда я обновляю некоторые данные с помощью querydsl, то измененная дата вообще не меняется.

и собственный запрос JPA с @query и @modifying также не работает.

, и я узнаю, что это работает с помощью методов JPA .save (). (тот же первичный ключ, что JPA обновил данные).

, поэтому кажется, что он не работает с частичным обновлением.

Я все еще могу использовать метод .save (). но проблема в том, что я не хочу, чтобы сущность получила установщик, только создавая сущность с помощью конструктора

, когда обновляя сущность с помощью метода .save (), мой код

-- service
@Transactional
    public Long updateCodeSolution(SMSolutionUpdateRequest dto) {

        return repository.save(dto.toUpdateEntity(repository.getOne(dto.getId()))).getId();

    }
@Transactional
    public Long updateCodeSolutionItemOrder(SMSolutionUpdateRequest dto) {

        return repository.save(dto.toUpdateItemOrderEntity(repository.getOne(dto.getId()))).getId();

    }
-- dto
@Getter
@Setter
@NoArgsConstructor
public class SMSolutionUpdateRequest implements Serializable {

    private static final long serialVersionUID = 2744304693339014087L;

    private Long id;
    private Long codeMenuId;
    private String solutionNm;
    private int itemOrder;

    public CodeSolution toUpdateEntity(CodeSolution entity) {

        return CodeSolution.builder()
                .id(id)
                .shopCd(entity.getShopCd())
                .codeMenuId(codeMenuId)
                .solutionNm(solutionNm)
                .itemOrder(entity.getItemOrder())
                .build();

    }

    public CodeSolution toUpdateItemOrderEntity(CodeSolution entity) {

        return CodeSolution.builder()
                .id(id)
                .shopCd(entity.getShopCd())
                .codeMenuId(entity.getCodeMenuId())
                .solutionNm(entity.getSolutionNm())
                .itemOrder(itemOrder)
                .build();

    }


}

вы можете теперь я должен создавать методы, когда нужны все обновленные столбцы.

, поэтому мой вопрос

  1. , кажется, что modifyDate изменяется при прослушивании события JPA (например, @PreUpdate, @PostUpdate), если Правильно ли тогда, когда запрос querydsl затем инициирует событие?
  2. , если 1. вопрос невозможен, тогда какой самый умный способ обновления данных с сущностью не имеет установщика. потому что мой путь так много тратит мое время на разработку.

спасибо, что прочитали мой вопрос, и извините, мой Engli sh не хорош.

заранее спасибо !!

...