有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在这里发布这篇文章是因为我面临一个问题,我找不到解决它的方法。 我已经到处寻找解决方案,但没有找到任何能让我松懈的方法

在我的项目中,我使用了hibernate和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

附言:我不认为这是另一篇文章的翻版,因为我整个下午都在浏览它,如果我错了,我会非常感谢你们的链接


编辑

我将尝试使用一种变通方法从零开始获取我的查询,以获取我的信息,我希望这能奏效。我将首先在B上进行筛选并获取我的ID,然后我将搜索我的AAD对象(以及我的A对象),这要感谢这些ID


编辑2

我的工作是按照预期获得信息,只要我没有找到前一个案例的任何修复方法,我就会保持这一点。如果有人知道什么,请告诉我,我将不胜感激


共 (0) 个答案