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) 个答案