Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate条件带联接的多选查询_Java_Hibernate_Spring Data Jpa - Fatal编程技术网

Java Hibernate条件带联接的多选查询

Java Hibernate条件带联接的多选查询,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,下面是我的实体类,我正在使用criteria builder检索此实体,但我只需要获取id、title和标记 Question.java @实体 @表(name=“问题\标题”) 公开课问题{ @身份证 @列(name=“id”) @GeneratedValue(策略=GenerationType.IDENTITY) 私人长id; @列(name=“title”) 私有字符串标题; @OneTONE(mappedBy=“question”,cascade=CascadeType.ALL) 私人机

下面是我的实体类,我正在使用criteria builder检索此实体,但我只需要获取
id
title
标记

Question.java

@实体
@表(name=“问题\标题”)
公开课问题{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(name=“title”)
私有字符串标题;
@OneTONE(mappedBy=“question”,cascade=CascadeType.ALL)
私人机构;
@许多
@JoinTable(name=“QUESTION\u TAGS”,joinColumns=@JoinColumn(name=“QUESTION\u id”,referencedColumnName=“id”),inverseJoinColumns=@JoinColumn(name=“tag\u id”,referencedColumnName=“id”))
私人收藏标签;
@manytone(targetEntity=Registration.class,fetch=FetchType.LAZY)
@JoinColumn(nullable=false,name=“user\u id”,referencedColumnName=“id”)
私人注册;
}
下面是我的代码获取。我不知道如何将项目标签表

javax.persistence.criteria.CriteriaQuery query=getCriteriaBuilder().createQuery(Question.class);
根问题=query.from(question.class);
query.multiselect(question.get(“id”)、question.get(“title”)、question.get(“标签”);
List questionList=entityManager.createQuery(query.getResultList();

如果只想获取问题实体的id、标题和标记,可以使用

请尝试以下代码:

   CriteriaQuery<Tuple> query = getCriteriaBuilder().createTupleQuery();
   Root<Question> question = query.from(Question.class);
   query.multiselect(question.get("id"), question.get("title"), question.get("tags"));
   List<Tuple> questionList = entityManager.createQuery(query).getResultList();
CriteriaQuery query=getCriteriaBuilder().createTupleQuery();
根问题=query.from(question.class);
query.multiselect(question.get(“id”)、question.get(“title”)、question.get(“标签”);
List questionList=entityManager.createQuery(query.getResultList();
您可以使用:

CriteriaBuilder=session.getCriteriaBuilder();
CriteriaQuery criteria=builder.createTupleQuery();
Root=criteria.from(Question.class);
路径qId=root.get(“id”);
路径qTitle=root.get(“title”);
Join qTag=root.Join(“标记”,JoinType.INNER);
标准:多选(qId、qTitle、qTag);
列表元组=session.createQuery(条件).getResultList();
for(元组:元组)
{
Long id=tuple.get(qId);
字符串标题=tuple.get(qTitle);
Tag=tuple.get(qTag);
}
要选择多个值,请选择将“包装”多个值的对象。对于这种方法,您应该声明一个包装类:

公共类问号
{
私人最终长id;
私人最终字符串标题;
私人最终标签;
公共问题标签(长id、字符串标题、标签)
{
this.id=id;
this.title=标题;
this.tag=tag;
}
公共长getId()
{
返回id;
}
公共字符串getTitle()
{
返回标题;
}
公共标记getTag()
{
返回标签;
}
}
然后在查询中使用它:

CriteriaBuilder=session.getCriteriaBuilder();
CriteriaQuery criteria=builder.createQuery(QuestionTag.class);
Root=criteria.from(Question.class);
路径qId=root.get(“id”);
路径qTitle=root.get(“title”);
Join qTag=root.Join(“标记”,JoinType.INNER);
选择(builder.construct(QuestionTag.class、qId、qTitle、qTag));
List wrappers=session.createQuery(条件).getResultList();

这是可行的,但为什么我不能在集合中获取实体中声明的标记@AashishVerma我无法通过文件中的引用来证明这一点,但恐怕您应该选择整个实体来实现它。您可以将所有关联声明为惰性关联,并仅获取必要的关联
标记