Привет, я разработал веб-сервер с 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();
}
}
вы можете теперь я должен создавать методы, когда нужны все обновленные столбцы.
, поэтому мой вопрос
- , кажется, что modifyDate изменяется при прослушивании события JPA (например, @PreUpdate, @PostUpdate), если Правильно ли тогда, когда запрос querydsl затем инициирует событие?
- , если 1. вопрос невозможен, тогда какой самый умный способ обновления данных с сущностью не имеет установщика. потому что мой путь так много тратит мое время на разработку.
спасибо, что прочитали мой вопрос, и извините, мой Engli sh не хорош.
заранее спасибо !!