2010-02-25 3 views
2

3.2.4.sp1 나는이 두 단체 사용자 및 CONTACTINFO"절전 모드"의 엔터티 리스너? 최대 절전 모드 사용

User는 관련 ContactInfo는 관계가로 즉 ContactInfo, 단방향이 속한 사용자에 대한 아무 생각이 없다 (도해야 있습니다 다른 관계에서 재사용 됨)

엔티티는 실제 사용자가 아닌 다른 사용자가 데이터베이스에서 업데이트하도록하는 엔티티 수신기를 가지고 있습니다. 이것은 잘 작동합니다. 문제는 한 사용자가 다른 사용자 ContactInfo을 업데이트 할 수 있다는 것입니다. ContactInfo에 저장이 사용자로부터 계단식으로 연결될 때 엔터티 수신기를 실행하는 것을 포함하고 싶습니다.

현재 관계

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
@Cascade({ org.hibernate.annotations.CascadeType.ALL, 
     org.hibernate.annotations.CascadeType.DELETE_ORPHAN }) 
@JoinColumn(name = "CONTACT_PERSON", nullable = false) 
public ContactPerson getContactInfo() { 
    return contactInfo; 
} 

public void setContactInfo(ContactPerson contactInfo) { 
    this.contactInfo = contactInfo; 
} 

현재 : 엔티티 리스너 :

내가 무엇을 찾고 있어요 추측
public class UserListener extends EntityListener { 

    @PreUpdate 
    @PrePersist 
    @PreRemove 
    public void checkWriteAuthorization(User user) throws IllegalUserAccessException { 
     //access rules here 
    } 
} 

같은 뭔가 "@PreCascadeChanges"

실제 매장 전화는 항상이다 엔티티 User 및 업데이트가 캐스케이드 됨 ContactInfo

+0

안녕하세요, 저는 이것이 오래된 것을 알고 있지만 ...이 문제에 대한 해결책을 찾았습니까? – Nimchip

답변

1

ContactInfo의 저장이 사용자로부터 계단식 연결될 때 엔터티 수신기를 실행하는 것을 포함하고 싶습니다.

나는 그래서 당신은 콜백 @PreUpdate, @PrePersistUser에 대한 같은 @PreRemove에 당신에게 검사를 수행해야합니다 생각하지 않습니다. 그리고 엔티티가 일부 사용자에게 "속한"것인지 확인하려면이 정보를 어딘가에 저장해야합니다. 귀하의 경우, 나는 왜 당신이 User-->ContactInfo 연결을 양방향으로 만들 수 없는지 이해하지 못합니다. 당신은 명확히 할 수 있습니까?

+0

감사합니다. 다른 엔티티에 대해서도 사용되기 때문에 연결을 양방향으로 만들고 싶지 않습니다. 회사는 ContactPerson을 보유 할 수 있습니다. 레거시 시스템을 더 추가하기 때문에 너무 많은 변경을 피하고 싶습니다. 사용자를 계속 유지하기 전에이 검사를 수행해야하므로 리스너가 불필요합니다. – Tomas

1

동일한 문제가 생겼으며 기본 엔티티 클래스에 Lifecycle을 구현하고 onSave 메서드에서 원하는 동작을 지정하여 해결했습니다.