2016-10-26 2 views
2

두 개의 엔티티 Customer 및 AppUser가 있다고 가정 할 때 이들은 일대 다 관계입니다.자식 테이블에 대한 최대 절전 모드 소프트 삭제

고객 엔티티 :

@Entity 
@Table(name = "CUSTOMER") 
//Override the default Hibernation delete and set the deleted flag rather than deleting the record from the db. 
@SQLDelete(sql="UPDATE customer SET deleted = '1' WHERE id = ?") 
//Filter added to retrieve only records that have not been soft deleted. 
@Where(clause="deleted <> '1'") 
public class Customer implements java.io.Serializable { 
    private long id; 
    private Billing billing; 
    private String name; 
    private String address; 
    private String zipCode; 
    private String city; 
    private String state; 
    private String notes; 
    private char enabled; 
    private char deleted; 
    private Set appUsers = new HashSet(0); 

    //Constructors... 

    //Getters and Setters... 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "customer") 
    //Filter added to retrieve only records that have not been soft deleted. 
    @Where(clause="deleted <> '1'") 
    public Set getAppUsers() { 
    return this.appUsers; 
    } 
    public void setAppUsers(Set appUsers) { 
    this.appUsers = appUsers; 
    } 
} 

APPUSER 엔티티 :

@Entity 
@Table(name = "APP_USER") 
//Override the default Hibernation delete and set the deleted flag rather than deleting the record from the db. 
@SQLDelete(sql="UPDATE app_user SET deleted = '1' WHERE id = ?") 
//Filter added to retrieve only records that have not been soft deleted. 
@Where(clause="deleted <> '1'") 
public class AppUser implements java.io.Serializable { 
    private long id; 
    private Customer customer; 
    private AppRole appRole; 
    private char enabled; 
    private String username; 
    private String appPassword; 
    private Date expirationDate; 
    private String firstName; 
    private String lastName; 
    private String email; 
    private String phone; 
    private String fax; 
    private char deleted; 
    private Set 
    persons = new HashSet(0); 

    //Constructors... 

    //Getters and Setters... 
} 

소프트 삭제가 둘 다 잘 작동합니다.

내 질문은 내가 고객의 세트에서 하나 개의 항목을 제거 할 때 나는 부드러운 APPUSER를 삭제하는 방법을, 나는 예를 들어, 고객 엔티티 될 saveOrUpdate이다 :

Customer customer = getCustomerById(id); 
Set<AppUser> appUsers = customer.getAppUsers(); 

, 우리는 네 appUsers이 지금 가정

appUsers.remove(oneItem) 

saveCustomer(customer); 

이제 삭제 된 appUser는 데이터베이스에서 하드 삭제되었으며 세 개의 레코드로 남았습니다. 난 여전히 그런 사건을 처리하기 위해 부드러운 삭제를 사용하려면, 누군가가 그것에 도울 수 있습니까?

답변

3

마지막으로, 고객 클래스 컬렉션에 @SQLDelete를 추가하여 대답을 찾았습니다.

@SQLDelete(sql="UPDATE customer SET deleted = '1' WHERE id = ?") 
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "customer") 
//Filter added to retrieve only records that have not been soft deleted. 
@Where(clause="deleted <> '1'") 
    public Set getAppUsers() { 
    return this.appUsers; 
} 

최대 절전 모드의 문서 링크 : http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-filters

관련 문제