2016-08-05 44 views
2

Ich habe Benutzer Einheit:Wie Entitäten erhalten, wenn OneToMany Beziehung enthält Werte mit Hibernat Filter

public class User implements IStandarizedEntity { 

private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "id") 
private Long id; 

@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "web.user_role", 
     joinColumns = { 
      @JoinColumn(name = "user_id", referencedColumnName = "id")}, 
     inverseJoinColumns = { 
      @JoinColumn(name = "role_id", referencedColumnName = "id")}) 
@Size(min = 1, max = 10) 
private List<Role> roles = new ArrayList<>(); 

A eine Rolle Einheit:

public class Role implements IStandarizedEntity { 

private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "id") 
private Long id; 

@Column(name = "type") 
@Enumerated(EnumType.STRING) 
private ERole type; 

ich wie ein JPA-Provider überwintern verwenden. Ich möchte nur Benutzer mit einer bestimmten Rolle erhalten. Ich habe eine benannte Abfrage geschrieben, um alle Benutzer abzurufen, und jetzt versuche ich @Filter zu verwenden, um nur Benutzer mit dem angegebenen Rollentyp abzurufen.
Was ich erreicht habe, ist, dass ich alle Benutzer abrufen kann und beim Laden von Rollen kann ich gefilterte Rollen Liste laden, aber es ist nicht das, was ich tun möchte.

Danke für jede Hilfe.

Grüße, Sebastian

Antwort

1

können Sie nur die Rolle filtern, wenn die Abfrage. Zum Beispiel:

Select u from User u join fetch u.roles r where r.type = :roleType; 

holen Registriert werden alle Benutzer zurückkehren mit Rollen Ihre Filter entsprechen.

+0

Hallo, vielen Dank für die Antwort, aber ich muss manchmal filtern und manchmal nicht. Es hängt davon ab, welche Anfrage ich vom Frontend bekommen habe. Ich denke, dies durch session.enableFilter() zu tun, wenn eine Filterung erforderlich ist, und @ filter zum Festlegen der Filterung zu verwenden. –

+0

Sie können sich [hier] (http://stackoverflow.com/questions/6919686/annotation-to-filter-results-of-a-onetomany-association) ansehen, um herauszufinden, wie Sie es implementieren. Für mich wird nur eine dynamische Abfrage mit CriteriaQuery erstellt. –