Java 如何根据排除原则从另一个表中筛选选择

Java 如何根据排除原则从另一个表中筛选选择,java,sql,hibernate,spring-boot,spring-data-jpa,Java,Sql,Hibernate,Spring Boot,Spring Data Jpa,我在SpringBootV1.5.7下的应用程序 我有3个实体(示意图): 现在我需要为用户选择所有单词,但排除用户列表中的单词 用户_id=1的本机SQL为 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

我在SpringBootV1.5.7下的应用程序

我有3个实体(示意图):

现在我需要为用户选择所有单词,但排除用户列表中的单词

用户_id=1的本机SQL为

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
最好的方法是什么?理想情况下,我希望使用Spring数据功能或HQL,但我不明白如何

UPD

我用本机查询解决了我的问题:

@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);
}
@实体
@命名设备(
name=“User.getWordsToProcess”,
resultClass=Word.class,
query=“”
)
公共类用户{…}
...
公共接口UserRepository扩展了Crudepository{
列出getWordsToProcess(整数用户标识);
}

最快的答案是
标准
api(但在hibernate 5.2及更高版本中不推荐使用) 因此,您可以使用Hql:

getSession().createQuery(" select * from UserWordList u left join fetch u.word
left join fetch u.user").list()
您可以使用
union
或创建另一个查询来获取
UserAnotherWordList
。 您还可以在Hql中设置任何限制,如下所示:

Query query =  getSession().createQuery(" select * from UserWordList u left join fetch u.word left join fetch u.user us where us.user = :sample").list();
query.setParameter("sample",value);
query.list();

投票吧。我对i18n有问题,您的
左加入获取
帮助我解决了问题!
Query query =  getSession().createQuery(" select * from UserWordList u left join fetch u.word left join fetch u.user us where us.user = :sample").list();
query.setParameter("sample",value);
query.list();