2017-07-26 1 views
1

J'ai beaucoup à beaucoup de relation entre l'utilisateur et l'événement. J'ai besoin d'avoir une colonne supplémentaire dans la table relationnelle. J'ai fait l'identification:@ManyToMany avec colonne supplémentaire - comment charger via Spring Data?

@Entity 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @OneToMany(mappedBy="user") 
    private Set<EventUser> eventUsers = new HashSet<>(); 

// 

} 

@Entity 
public class Event { 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    private long id; 

    @OneToMany(mappedBy="event") 
    private Set<EventUser> eventUsers = new HashSet<>(); 

// 

} 

@Entity 
@Table(name = "Event_User") 
public class EventUser { 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    private long id; 

    private String reaction; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "user_id") 
    private User user; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "event_id") 
    private Event event; 

// 

} 

Mais maintenant ... Je ne sais pas comment charger tous les événements où l'utilisateur a l'email concret. Avant cela, j'ai utilisé la méthode: findByUsersEmail (String email);

Maintenant, je ne peux pas faire cela, parce que l'événement n'a pas de champ Set users.

Des idées?

+0

1. Modifier la structure des tables: Utilisateur, Événement, Réaction, Réaction-événement-utilisateur 2. Changer la requête à la méthode 'findByEmail' 3. Qu'en est-il de' @ JoinTable' si vous n'avez besoin que d'événements et non besoin de raisons –

Répondre

1

Ce dont vous avez besoin ici est property-expressions.

Juste une idée rapide pour commencer:

findByEventUsers_UserEmail(String email); 

Note: Ne pas oublier que la création de requêtes par noms de méthode est une approche très limitée et seulement utilisé par cas triviaux. Dans tous les autres cas, n'ayez pas peur d'utiliser l'annotation @Query sur la méthode ou d'écrire manuellement l'API JPQL/Criteria.