2016-06-23 6 views
0

Ich versuche, ein Soft-Löschen über meine gesamte Plattform zu implementieren. Jede Tabelle hat eine deleted_on Spalte, die zum Herausfiltern gelöschter Zeilen verwendet wird.Filterzeilen in Join-Tabelle - viele zu viele in Hibernate

Dies beinhaltet die Join-Tabelle, die ich zwischen meinen Dateien und Benutzern habe. Ich hatte kein Glück, etwas zu finden, das helfen könnte. Gerade jetzt sehen meine Klassen wie diese

@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 
} 

Benutzerklasse:

@Entity 
public class User { 

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

    // Constructor and other fields 
} 

Wenn es möglich ist, würde ich den folgenden Code in der Lage sein möge ausführen, ohne es zu Filterung im Geschäft Code

File file = fileRepository.findOne(fileKey); 
file.getUsers().remove(user); 
fileRepository.save(file); 

Antwort

1

Wenn Sie als JPA-Anbieter Hibernate sind, können Sie die @Where Annotation

verwenden

dies die where-Klausel auf alle Ihre Fragen mit der Klasse Benutzer

Zusätzlichen Anmerkung gelten:

Sie die @where Klausel angeben müssen wieder in all Ihren Beziehungen

@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 die '@ Where' Annotation sollte stattdessen' @ WhereJoinTable' sein – Kyefer