이 디자인 패턴을 구현하려면 다큐멘터리 제안이나 sudo 코드 또는 링크가 필요합니다. 필자는 테이블의 모든 열을 나타내는 Entity (Pojo) 클래스를 작성했습니다. 내 요구 사항 몇 가지 디자인 솔루션을 쓰고 싶습니다. 그래서 여러 변경 사항이 발생하면 해당 엔티티의 모든 이전 값을 추적 할 수 있어야합니다.Java에서 Entity Class 객체의 이전 값을 모두 가져 오는 데 필요한 디자인 솔루션
0
A
답변
0
최대 절전 모드와 같은 프레임 워크를 사용하는 것이 좋습니다.
프레임 워크를 사용할 수없는 경우 @PrePersist
및 @PreUpdate
을 사용하여 기록 추적을 구현할 수 있습니다. 기업은 @PrePersist
및 @PreUpdate
엔티티가 실제 상태 저장로드되면
- 확인을 참조하십시오
예 :
@Entity
public class Person implements Serializable {
@Id
private Integer id;
private String firstname;
private String lastname;
/**
*/
@OneToMany(mappedBy = "person", fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
private List<PersonHistory> personHistories = new ArrayList<>();
@Transient
private transient Person previousPersonState;
protected Person() {
// JPA only
}
public Person(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
@PostLoad
private void saveState() {
this.previousPersonState = SerializationUtils.clone(this); // from apache commons-lang
}
@PrePersist
@PreUpdate
private void updateHistory() {
if (personChanged()) {
PersonHistory personHistory = new PersonHistory(previousPersonState);
personHistories.add(personHistory);
}
}
public boolean personChanged() {
if (previousPersonState == null) {
return false;
}
if (getFirstname() != null ? !getFirstname().equals(previousPersonState.getFirstname()) : previousPersonState.getFirstname() != null)
return false;
if (getLastname() != null ? !getLastname().equals(previousPersonState.getLastname()) : previousPersonState.getLastname() != null)
return false;
return true;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
}
(210) 및 PersonHistory 당신은 http://hibernate.org/orm/envers/ 및 http://www.baeldung.com/를 살펴 할 수 있습니다이
@Entity
public class PersonHistory {
@Id
private Integer id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(nullable = false)
private Person person;
private String firstname;
private String lastname;
private Date createdDate;
protected PersonHistory(){
// default constructor for JPA
}
public PersonHistory(Person person) {
this.person = Objects.requireNonNull(person);
this.firstname = person.getFirstname();
this.lastname = person.getLastname();
createdDate = new Date();
}
public Date getCreatedDate() {
return createdDate;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
}
관련 문제
- 1. map.putAll()에서 객체의 이전 값을 가져 오는 방법은 무엇입니까?
- 2. JavaScript 도움말 onclick에서 동적 값을 가져 오는 데 필요한 기능
- 3. java에서 json arraylist에서 값을 가져 오는 방법
- 4. jquery에서 객체의 값을 가져 오는 문제가 발생했습니다.
- 5. ObjectListView에서 선택한 객체의 값을 가져 오는 방법
- 6. 단일 객체의 값을 가져 오는 방법은 무엇입니까?
- 7. Pug에서 객체의 값을 가져 오는 방법은 무엇입니까?
- 8. File 객체의 이름을 Java에서 확장하지 않고 가져 오는 방법은 무엇입니까?
- 9. 답변을 그룹화하는 데 필요한 SQL 쿼리 솔루션
- 10. Java에서 환경 변수의 값을 가져 오는 중입니까?
- 11. Java에서 어노테이션 값을 가져 오는 방법은 무엇입니까?
- 12. Java에서 UIComponent 값을 가져 오는 방법은 무엇입니까?
- 13. 레일스가 이전 값을 가져 오는 mysql을 가져왔다.
- 14. Java에서 이미지를 표시하는 데 필요한 RAM이
- 15. Java에서 JSON 객체의 값을 추출하는 데 문제가 있습니다.
- 16. .class 파일을 Android 프로젝트로 가져 오는 데 문제가 발생했습니다.
- 17. 이전 버튼에서 동일한 값을 가져 오는 중 클릭하십시오. C#
- 18. Spring @Entity 클래스 모두 가져 오기
- 19. wget을 사용하여 파일을 가져 오는 데 필요한 스크립트
- 20. YouTube에서 비디오 파일이나 스트림을 가져 오는 데 필요한 URL은 무엇입니까?
- 21. sybase 데이터베이스의 ddl을 가져 오는 데 필요한 최소 권한
- 22. 종속성을 가져 오는 데 필요한 maven 저장소 URL을 지정 했습니까?
- 23. JavaScript 객체의 cssText 속성을 가져 오는 데 문제가 발생했습니다.
- 24. 클래스를 가져 오는 방법 _ : 모두
- 25. Java에서 TPM을 활용하는 데 필요한 정보
- 26. Entity Framework 컬렉션 정렬을 수행하는 데 필요한 일반 함수
- 27. struts 2 동일한 객체의 다른 값을 가져 오는 작업 체인
- 28. 호출 가능하면 객체의 값을 가져 오는 내장 함수?
- 29. Dr. Java에서 HTTPClient를 가져 오는 방법은 무엇입니까?
- 30. 배열 객체의 키를 가져 오는 방법은 무엇입니까?
처럼 보일 수 있습니다 database-auditing-jpa. –
예. 이것이 내가해야 할 일입니다. 하지만, 어떤 절전/JPA 관련 API를 사용하지 않고 .. 내가 그것을 간단한 핵심 자바 모듈을 사용하여 작성해야합니다. 그것을 디자인하는 방법은 무엇이 있어야합니까 ??? –