grails 도메인 클래스에서 beforUpdate 이벤트를 구현하려고합니다. Domains 속성의 이전 값과 새 값 모두를 감사해야합니다. isDirty
체크를 사용하거나 도메인에 더러운 속성 목록을 반환하는 Domain.dirtyPropertyNames
을 사용할 수 있습니다. 그리고 getPersistentValue
은 두 값을 모두 가질 수 있도록 테이블에서 이전 값을 가져옵니다.grails에서 업데이트 된 도메인 속성의 이전 값을 가져 오는 중
도메인 클래스에서 beforUpdate 이벤트를 사용하고 여기에서 로깅 서비스를 호출하여 사용자 ID를 전달합니다 도메인. 이제이 ID를 사용하여 서비스의 사용자 인스턴스를 얻은 다음 위의 지정된 메소드를 사용하여 필드가 더티인지 확인 할 수 있습니까? 또는 실제로 UserController의 update def에서 Update를 수행 할 때 Audit을 기록해야합니까?
더 나은 접근 방법은 무엇입니까?
내가이 올바른 접근하면 확인하려는 ..
또한 내가 좋아하는,에 대한 치료를 취할 필요가 어떤 다른 것들 : 속성은 도메인 객체 참조와 간단하지 유형의 경우
1).
2) 도메인 클래스에서 서비스를 호출 할 때 구현할 생각으로 최대 절전 모드 세션을 비우지 않도록주의해야 할 다른 모든 것들.
감사
Priyank
편집 : 서비스의 방법에서
def beforeUpdate = {
GraauditService service = AH.getApplication().getMainContext().getBean(''graauditService)
service.saveUserUpdateEntry(this.id); // id property of User domain...
}
는 내가 .. 내가 업데이트 활동에 대한 로그 감사 할 사용자 도메인의 beforeUpdate 이벤트에서이 시도 :
:
def saveUserUpdateEntry(Long id){
User grauser = User.get(id);
println ("user="+ grauser)
println "Dirty Properties -: ${grauser.dirtyPropertyNames}"
println "Changed value for firstName = -: ${ grauser.firstName}"
println "Database value for firstName = -: ${ grauser.getPersistentValue('firstName')}"
}
나는, 이름, 이메일의 UI에서 LASTNAME을 업데이트를 수행하고 콘솔에서 다음을 얻을려고
user=com.gra.register.User : 1
Dirty Properties -: [eMail, firstName, lastName]
Changed value for firstName = -: sefser
Database value for firstName = -: administer
user=com.gra.register.User : 1
Dirty Properties -: []
Changed value for firstName = -: sefser
Database value for firstName = -: sefser
possible nonthreadsafe access to session
나는 알 수 없습니다입니다 :
1) 왜 2 개 세트를 얻고있다 ... 두 번 전에 한 번 커밋라는 이벤트가 한 번 후 커밋 ... ?? 하이버 네이트 예외를 제거하거나 처리하는 방법
2) (audit logging plugin를 사용 감사 로깅 GORM 이벤트 핸들러를 사용하기보다는 .. 미리 기능하지만 차이
이 pri_dev를 수행 할 수있는 방법이 많이 있으며, 최상의 접근 방법은 비즈니스 요구 사항에 따라 달라질 수 있습니다. 사용자가 변경 한 모든 변경 사항을 변경 하시겠습니까? 아니면 변경된 속성 만 변경 하시겠습니까? 얼마나 자주이 개체를 업데이트 할 것으로 예상합니까? 이러한 변경 사항을 GORM에 의해 매핑 된 데이터베이스, 로그 파일 ...에 유지할 계획입니까? –
예, 데이터베이스의 AuditLog 도메인에 추가하고 싶습니다. beforeUpdate와 그 최대 절전 모드 예외로부터 서비스에 대한 간단한 호출을 시도했습니다. 편집 섹션을 추가했습니다 –
도메인에서 2-3 개의 속성을 업데이트하고 save()를 호출하면 beforUpdate 이벤트가 호출되지만 Save 이벤트도 호출됩니다. create와 update가 모두 domain.save()에 대한 호출이기 때문에 나는 Hibernate가 현존 도메인의 새로운 Creation과 Update에 기반하여 다른 이벤트를 발생시킬만큼 똑똑한 지 알고 싶다. –