2016-10-26 20 views
2

CustomerとAppUという2つのエンティティがあり、それらが一対多の関係であるとします。子テーブルのHibernateソフト削除

顧客エンティティ:

@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を削除することができ、その後、私は例えば、CustomerエンティティをするsaveOrUpdateさ:

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

は今、私たちは4 appUsersを持っていると仮定し、

appUsers.remove(oneItem) 

saveCustomer(customer); 

ここで、削除されたappUserはデータベースからハード削除され、3つのレコードのままです。私はまだそのようなケースを処理するソフト削除を使用したい、誰かがそれを助けることができますか?

答えて

3

最後に、Customerクラスのコレクションに@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; 
} 

Hibernateのドキュメントへのリンク: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-filters

関連する問題