我有以下课程:
@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;
}
我试图显示已回答的检查清单列表(答案在&#34; ResponsesCheckLists&#34;类中)但尚未回答(清单的其余部分位于&#34) ; checkLists&#34; class)。
我有以下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"
)
我知道查询的属性将被类的属性所取代。但是如何同时加入三个班级。
EDIT1:
@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"
)
此请求不会显示&#34; CheckLists&#34;的所有CheckLists。 class和回答的检查列表(可在&#34; ResponsesCheckLists&#34;类中找到)。
编辑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] path [/ 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;
}
- &GT;执行此解决方案后,请求(edit2)不会显示设备清单列表。
EDIT3:
@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查询来显示已回答的检查清单列表(答案在&#34; ResponsesCheckLists&#34;类中)但尚未回答(列表的其余部分位于&#34; checkLists&#34; class)。但我的测试显示设备对象加倍。
谢谢;
答案 0 :(得分:0)
"SELECT e "
+" FROM Equipements "
+" LEFT JOIN fetch e.checks c "
+" LEFT JOIN fetch c.ResponsesChecks r"
+" WHERE ...."
这将返回已获取集合的设备实体