HQL查询响应中的对象列表为空问题

时间:2018-12-05 16:33:06

标签: java hibernate hql

我将其发布在这里是因为我遇到了一个问题,但找不到解决该问题的方法。 我已经到处寻找解决方案,但是没有发现任何困扰我的地方。

对于我的项目,我正在使用休眠和Spring Boot。

我有以下课程:

A.java

@Entity 
@Table(name = "a")
@Data
public class A implements Serializable {
   private static final long serialVersionUID = 1L;
   ...
   @OneToMany(fetch = FetchType.LAZY, mappedBy = "audit", cascade = CascadeType.ALL)
    private List<AAD> aADs;
   ...
}

AAD.java

@Entity
@Table(name = "a_a_d")
@Data
public class AAD implements Serializable {
    private static final long serialVersionUID = 1L;
    ...
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "b_id")
    private B b;
    ...
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "A_id")
    private A a;
}

B.java

@Entity
@Table(name = "b")
@Inheritance(strategy = InheritanceType.JOINED)
@Data
public class B implements Serializable {
    private static final long serialVersionUID = 1L;
    ...
    @Column(nullable = false, name = "price")
    private Double price;
    ...
}

当我尝试在ARepositoryImpl中请求某些信息而没有任何过滤条件时,

StringBuilder request = new StringBuilder("SELECT DISTINCT a FROM A a LEFT JOIN a.aADs aad LEFT JOIN aad.b b");
Query queryPhase1 = getEntityManager().createQuery(request.toString());
finalResult = queryPhase1.getResultList();

我对所有信息的预期结果都是如此:

 - 0 = {A@18952}
       _ id = {Long@19678} 2
         ...
       _ aADs = {PersistentBag@1978} size = 2
           - 0 = {B@12346}
           - 1 = {B@25463}
                _ id = {Long@123547} 1
                  ...
                _ price = {Double@125487} 17.0
 - 1 = {A@5478}
    ...
 - 2 = {A@1234}
    ...

但是,一旦我添加了一个过滤器,我就会得到一个空结果。那是我完全失去它的那一刻:(

StringBuilder request = new StringBuilder("SELECT DISTINCT a FROM A a LEFT JOIN a.aADs aad LEFT JOIN aad.b b WHERE b.price=17.0"); 
// I saw in the previous result that a B.price was equals to 17.0 so i try to filter on it so i obtain only my A objects which have a B.price = 17.0
// I should at least obtain {A@18952} in the reuslt of this query if i look my previous result
    Query queryPhase1 = getEntityManager().createQuery(request.toString());
    finalResult = queryPhase1.getResultList();

此外,它们没有错误,只是查询末尾的空白列表。我试图重新格式化查询并直接在aad上搜索(不使用左联接),但尝试此操作时出现解引用错误。

有人给我小费,或者回答让我畅通无阻,这真的是我的救星,因为我很快就会没头发了:/

感谢您的宝贵时间,对于冗长的帖子, 在这里,有这个sweet potato kiss

P.S .:我不认为这是另一篇文章的副本,因为我整个下午都在浏览它,如果我错了,我将非常感谢您的联系人员!


编辑

我将尝试使用一种变通方法来从头开始查询我的信息,我希望这会成功。我将首先在B上进行过滤并获得ID的支持,然后借助这些ID搜索我的AAD对象(以及我的A对象)。


编辑2

我的解决方法实际上是按预期获取信息,只要我没有找到对上一种情况的任何解决方法,我就会保持一致。如果有人知道一些事情,请告诉我,我将不胜感激!

0 个答案:

没有答案