2009-11-12 2 views
1

좀 건축가 내 데이터베이스의 각 테이블에 들어 봄과 최대 절전 모드 (주석 구성) 에 따라자동 충전 엔티티 속성

내가하는 응용 프로그램을 개발 질문, 내가 4 개 필드를 추가 유형이 (?) : createdBy 및 modifiedBy을 (String), 생성 및 수정 (Datetime). 또한 각 엔티티 클래스에는이 필드와 getter/setter 쌍이 있습니다. 그래서 각 DAO 추가 코드를 추가하는 대신이 필드를 채우는 최상의 방법을 찾고 싶습니다. 가능한가?

내가 어떤 제안 Spring AOP에서

답변

3

물론입니다. 그냥 모든 영속 인스턴스에 대한 기본 클래스에이 코드를 추가하고 주석 처리 가능 :

@PrePersist 
public void prePersist() 
{ 
    if (created == null) 
    { 
     created = updated = createCurrentTimestamp(); 
     createdBy = updatedBy = CurrentUser.get(); 
    } 
} 

@PreUpdate 
public void preUpdate() 
{ 
    updated = createCurrentTimestamp(); 
    updatedBy = CurrentUser.get(); 
} 

public static java.sql.Timestamp createCurrentTimestamp() 
{ 
    final long now = System.currentTimeMillis(); 
    final java.sql.Timestamp ts = new java.sql.Timestamp (now); 
    ts.setNanos(((int)(now % 1000)) * 1000000); 
    return ts; 
} 

CurrentUser 날 사용자가 시작 작업의 시작 부분에서 지정할 수있는 ThreadLocal<String>이다. 이렇게하면 터치 된 모든 객체에 올바른 정보가 포함됩니다.

주석 처리가 없으면 HBM 파일에서 해당 옵션을 활성화하십시오.

0

봐 드리겠습니다. DAO 메소드에 "인터셉터"를 할당하여 객체가 인터셉터에 의해 처음 처리되고 DAO 메소드로 실행되도록 할 수 있습니다.
인터셉터에서 필요한 데이터로 개체를 채울 수 있습니다.

0

하나의 가능성은 각 엔티티가 데이터베이스로 플러시되기 바로 전에이 필드를 채울 수있는 최대 절전 모드 EventListener를 정의하는 것이다.