2016-06-23 9 views
0

私はプラットフォーム全体にソフト削除を実装しようとしています。各テーブルには、削除された行を除外するために使用されるdeleted_on列があります。結合テーブル内の行をフィルタする - 多少の休止状態

これには、自分のファイルとユーザーの間にある結合テーブルが含まれます。私は助けることができる何かを見つける運がなかった。それが可能だ場合、私はビジネスコード

File file = fileRepository.findOne(fileKey); 
file.getUsers().remove(user); 
fileRepository.save(file); 
でそれをフィルタリングすることなく、次のコードを実行できるようにしたいと思い

@Entity 
public class User { 

    @ManyToMany(mappedBy = "users") 
    private List<FileData> files = new ArrayList<>(); 

    // Constructor and other fields 
} 

:今私のクラスでは、この

@Entity 
public class File { 

    @ManyToMany 
    @JoinTable(
     name = "file_user", 
     joinColumns = @JoinColumn(name = "file_id", referencedColumnName = "file_id"), 
     inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id") 
    ) 
    private List<User> users; 

    // Constructor and other fields 
} 

Userクラスのように見えます

答えて

1

JPAプロバイダとしてHibernateの場合は、注釈

を使用できます
@Entity 
@Where(clause="deleted_on=1") 
public class User { 

    @ManyToMany(mappedBy = "users") 
    private List<FileData> files = new ArrayList<>(); 

    // Constructor and other fields 
} 

これは、ユーザクラスとすべてのクエリでwhere句を適用します

追加注:すべてのあなたの関係の中で再び@Where句を指定する必要が

@ManyToMany 
    @JoinTable(
     name = "file_user", 
     joinColumns = @JoinColumn(name = "file_id", referencedColumnName = "file_id"), 
     inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id") 
    ) 
@Where(clause="deleted_on=1") 
    private List<User> users; 
+0

@autin '@ Where'アノテーションは代わりに '@ WhereJoinTable'でなければなりません – Kyefer