当前位置: 首页 > 知识库问答 >
问题:

HQL:通过查询(包括JOIN)只从实体检索几个字段

凤伟泽
2023-03-14

我有以下Hibernate表:

public class Customer {
    //some fields... include customerId field
    public Person person;
    @OneToOne(cascade = { CascadeType.ALL },  fetch = FetchType.LAZY)
    @JoinColumn(name = "person_id", unique = false, nullable = true, insertable = true, updatable = true)
    public Person getPerson e () {
        return person;
    }

}

 public class Person {
    //some fields...

    private Set<History> histories;

    @ManyToMany(fetch=FetchType.LAZY, targetEntity=History.class,cascade={CascadeType.PERSIST,CascadeType.MERGE})
    @JoinTable(name="person_m2m_history",joinColumns={@JoinColumn(name="person_id")},
            inverseJoinColumns={@JoinColumn(name="persone_history_id")})
    public Set<History> getHistories() {
        return this.histories;
    }       
}
entityManager.createQuery("select c.customerId, ph.changedOn,
    ph.changedField, from Customer c 
    left join fetch c.person p 
    left join fetch p.histories ph 
    where ph.changedField = 'name'")

这是Createquery导致的错误:

'org.hibernate.queryException:查询指定了联接提取,但提取的关联的所有者不在选择列表中[fromelement{explicit,not a collection join、fetch join、fetch non-lazy properties,classalias=e,role=myproject.Customer.person,tablename=person,tablealias=person,tablename=person,tablealias=person1_,origin=customer0_,columns={customer0_.person_id,

共有1个答案

金子轩
2023-03-14

检查您的查询,它在from、from附近有一个额外的逗号

entityManager.createQuery("select c.customerId, ph.changedOn,
    ph.changedField from Customer c 
    left join fetch c.person p 
    left join fetch p.histories ph 
    where ph.changedField = 'name'")

可能有用。

 类似资料:
  • 我用spring boot starter创建了一个基本的graphql java应用程序,并在使用Hibernate和Jpa的MSSQL数据库上使用graphql spqr库。 我有一个名为“任务”的实体,有5个字段。我有一个简单的Jpa存储库和一个调用“findAllTasks”方法的简单Jpa服务。它工作得很好,但是如果我指定(例如)使用graphiql只查询一个字段,我可以通过SQL日志看

  • 问题内容: 我将Firebase,后端即服务用于我的网站应用程序,并通过AngularJS进行编程。 我想使用数据库查询来获取记录,例如: 我在Firebase服务器中具有电视连续剧数组 JSON CODE : 我现在使用的代码来解决这个问题: 我想在不使用和的情况下解决这个问题。我应该怎么做? 就像这样: 问题答案: 我有一些建议可能会帮助您: 查阅Firebase查询文档。特别, 您可以结合使

  • null 这似乎意味着我不像使用简单的“From customer”查询那样获取customer实体的实例。如果是这种情况,如何返回客户实体?如果没有,那我做错了什么?

  • 我使用的是ES版本5.6。我有一个像下面这样的文档存储在ES中。 我想搜索所有已“启用”的字段。 我尝试了以下查询,但都不起作用。 但是下面的查询起作用了 因此,看起来只匹配顶级字段,而不匹配嵌套字段。是否有任何方法可以查询包含在所有字段中的文本,包括嵌套字段。我不想显式指定嵌套字段名。我正在寻找一种全局搜索,我想在文档中的任何地方搜索“文本”。 谢了。

  • 问题内容: 这是我的情况,我有两个基本的POJO,并给出了一个简单的hibernate映射: 我的SQL查询返回的行看起来像这样: 我的hibernate查询如下所示: 这是每个部分的内容:Hibernate文档的18.1.3:http : //docs.jboss.org/hibernate/core/3.6/reference/zh- CN/html/querysql.html#d0e1746