Ma demande en vertu de Spring Boot v1.5.7Comment filtrer sélection de la table par une autre table par principe d'exclusion
J'ai 3 entités (de façon schématique):
@Entity
public class Word {
@Id
@GeneratedValue
private Integer id
...
}
@Entity
public class UserWordList {
@Id
@GeneratedValue
private Integer id
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "word_id")
private Word word;
}
@Entity
public class UserAnotherWordList {
@Id
@GeneratedValue
private Integer id
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "word_id")
private Word word;
}
Et maintenant, je dois sélectionner tous les mots pour l'utilisateur, mais excluent les mots placés dans les listes de l'utilisateur
SQL natif pour user_id = 1 est
select *
from Word w
left join UserWordList uwl
on w.id = uwl.word_id and uwl.user_id = 1
left join UserAnotherWordList uawl
on w.id = uawl.word_id and uawl.user_id = 1
where uwl.word_id is NULL
and uawl.word_id is NULL
Quelle est la meilleure façon de le faire? Idéalement, je voudrais utiliser les fonctionnalités de données Spring ou HQL, mais je ne comprends pas comment ...
UPD
je résoudre mon problème avec requête native:
@Entity
@NamedNativeQuery(
name = "User.getWordsToProcess",
resultClass = Word.class,
query = "<...native query to select Words...>"
)
public class User {...}
...
public interface UserRepository extends CrudRepository<User, Integer> {
List<Word> getWordsToProcess(Integer userId);
}