【发布时间】:2017-10-29 22:17:08
【问题描述】:
我有以下课程:
@Entity
public class Equipements implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long idEquipements;
@OneToMany(mappedBy="equipements", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private Collection<CheckLists> checks;
}
@Entity
public class CheckLists implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long idCheckLists;
private String titreCheck;
private String recommendation;
@ManyToOne
@JoinColumn(name="equipements_id")
private Equipements equipements;
@OneToMany(mappedBy="CheckLts", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private Collection <ResponsesCheckLists> ResponsesChecks;
}
@Entity
public class ResponsesCheckLists implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long idResponsesCHeck;
@ManyToOne
@JoinColumn(name="missionsId")
private Missions Respmission;
@ManyToOne
@JoinColumn(name="checkLists_Id")
private CheckLists CheckLts;
}
我正在尝试显示已回答(答案在“ResponsesCheckLists”类中)但尚未回答(列表的其余部分在“checkLists”类中)的清单。
我有以下 SQL 查询:
SELECT * FROM equipements eq
LEFT JOIN check_lists checks
ON eq.id_equipements = checks.equipements_id
LEFT JOIN responses_check_lists resp
ON checks.id_check_lists = resp.check_lists_id
AND resp.missions_id = 15
AND eq.id_equipements = 1
ORDER BY checks.id_check_lists
我关注了互联网上的文档,但在 JPQL 中我的查询没有得到正确的转换。
以下查询仅显示在类 ResponsesCheckLists 中回答的检查列表:
@Query(
"SELECT checks, r "
+ " FROM CheckLists checks "
+ " inner join checks.ResponsesChecks r"
+ " WHERE checks.equipements.idEquipements = :idEqp "
+ " AND r.Respmission.idMission= :idmiss "
+ " ORDER BY checks.idCheckLists ASC"
)
我知道查询的属性会被类的属性代替。但是如何同时加入三个班级。
编辑1:
@Query(
"SELECT c, r "
+" FROM CheckLists c"
+" LEFT JOIN c.ResponsesChecks r"
+" JOIN fetch c.equipements e"
+" JOIN fetch r.Respmission m"
+" WHERE e.idEquipements = :idEqp"
+" AND m.idMission= :idmiss"
+" ORDER BY c.idCheckLists ASC"
)
此请求不显示“CheckLists”类的所有 CheckLists 和已回答的 checkLists(在“ResponsesCheckLists”类中找到)。
编辑2:
@Query(
"SELECT e "
+" FROM Equipements e"
+" LEFT JOIN fetch e.checks c "
+" LEFT JOIN fetch c.ResponsesChecks r"
+ " where e.idEquipements = :idEqp "
+ " and r.Respmission.idMission = :idmiss "
+ " order by c.idCheckLists asc"
)
编辑 2 错误:
1- Servlet.service() 用于 servlet [dispatcherServlet] 的上下文中 路径 [/App] 抛出异常 [请求处理失败;嵌套的 例外是 org.springframework.http.converter.HttpMessageNotWritableException: 无法写入内容:无限递归 (StackOverflowError)
2-WARN 3456 --- [nio-8099-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver :处理 [org.springframework.http.converter.HttpMessageNotWritableException] 导致 Exceptionjava.lang.IllegalStateException: 无法调用 提交响应后的 sendError()
Edit2错误解决办法;
添加注解@JsonIgnore
@JsonIgnore
Public Set <CheckLists> getChecks ()
{
Return checks;
}
-> 实施此解决方案后,请求(edit2)不显示设备清单列表。
编辑3:
@Query(
"SELECT e "
+" FROM Equipements e , CheckLists c"
//+" LEFT JOIN fetch e.checks c "
+" LEFT JOIN c.ResponsesChecks r"
+ " where e.idEquipements = :idEqp "
+ " and r.Respmission.idMission = :idmiss "
+ " order by c.idCheckLists asc"
)
Edit3 的结果:
[
{
"idEquipements": 1,
"nomEq": "Info",
"dateAjoutEq": "2017/04/09 20:37:58",
"dateModificationEq": "2017/04/09 20:48:40",
"checks": [] //133 items
},
{
"idEquipements": 1,
"nomEq": "Info",
"dateAjoutEq": "2017/04/09 20:37:58",
"dateModificationEq": "2017/04/09 20:48:40",
"checks": []//133 items
}
-我进行了 JPQL 查询以显示已回答(答案在“ResponsesCheckLists”类中)但尚未回答(列表的其余部分在“checkLists”类中)的清单列表。但是我的测试显示设备对象增加了一倍。
谢谢;
【问题讨论】:
-
如果您遵循 JPA 文档,您会知道连接跨越关系。为了让人们建议您的加入应该是什么,您也需要发布实体,显示关系并显示您尝试过的内容
-
我按照您说的更新帖子,先生,
-
你为什么删除你的答案??