위의 모든 답변을 결합하여 재사용 가능한 코드를 BaseEntity로 작성할 수 있습니다.
@Data
@NoArgsConstructor
@MappedSuperclass
public abstract class BaseEntity {
@Transient
public static final Sort SORT_BY_CREATED_AT_DESC =
Sort.by(Sort.Direction.DESC, "createdAt");
@Id
private Long id;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
@PrePersist
void prePersist() {
this.createdAt = LocalDateTime.now();
}
@PreUpdate
void preUpdate() {
this.updatedAt = LocalDateTime.now();
}
}
DAO 객체는 findAll 메소드를 오버로드합니다-기본적으로 여전히 사용합니다 findAll()
public interface StudentDAO extends CrudRepository<StudentEntity, Long> {
Iterable<StudentEntity> findAll(Sort sort);
}
StudentEntity
BaseEntity
반복 가능한 필드를 포함하는 확장 (ID로 정렬 할 수도 있음)
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
class StudentEntity extends BaseEntity {
String firstName;
String surname;
}
마지막으로 서비스 및 사용법은 SORT_BY_CREATED_AT_DESC
에서뿐만 아니라에서도 사용될 것입니다 StudentService
.
@Service
class StudentService {
@Autowired
StudentDAO studentDao;
Iterable<StudentEntity> findStudents() {
return this.studentDao.findAll(SORT_BY_CREATED_AT_DESC);
}
}
List<StudentEntity> findAllByOrderByIdAsc();
. 리턴 타입을 추가하고 여분의 공용 수정자를 제거하는 것도 좋은 생각입니다.)