如何在JPQL中连接三个类?
我有以下的类:如何在JPQL中连接三个类?
@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"
)
我知道,查询的属性将由类的属性所取代。但如何在同一时间加入三个班级。
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"
)
该请求不显示“检查表”类的所有清单和被回答清单(在“ResponsesCheckLists”类中找到)。
EDIT2:
@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的错误:servlet的
1- Servlet.service()[DispatcherServlet的]与 路径[/ APP]上下文抛出异常[请求处理失败;嵌套0例外是 org.springframework.http.converter.HttpMessageNotWritableException: 无法写入内容:无限递归(的StackOverflowError)
2- WARN 3456 --- [NIO-8099-EXEC-3] .wsmsDefaultHandlerExceptionResolver :的 [org.springframework.http.converter.HttpMessageNotWritableException] 导致Exceptionjava.lang.IllegalStateException处理:不能调用 sendError()的反应一直致力于
解决方案后,错误Edit2;
添加注解@JsonIgnore
@JsonIgnore
Public Set <CheckLists> getChecks()
{
Return checks;
}
- >该溶液中的请求(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"
)
Resultat 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
}
-I取得了JPQL查询显示的回答清单列表(答案是在“ResponsesCheckLists “类),但尚未回答(列表的其余部分位于”checkLists“类中)。但是我的测试显示设备对象翻了一番。
谢谢;
"SELECT e "
+" FROM Equipements "
+" LEFT JOIN fetch e.checks c "
+" LEFT JOIN fetch c.ResponsesChecks r"
+" WHERE ...."
这将返回设备实体与合集已经进账
谢谢你的回答,先生,但是这显示以下问题:'由于:org.hibernate.loader.MultipleBagFetchException:不能同时获取多个行囊:[com.SSC.DAO.Entities.Equipements.checks,com.SSC。 DAO.Entities.CheckLists.ResponsesChecks]' – Michael1
这对我来说也是新的......这里有一些不同的解决方案https://stackoverflow.com/questions/4334970/hibernate-cannot-simultaneously-fetch-multiple-bags – Zeromus
感谢链接,问题解决了联合获取。关于请求我尝试执行您的建议,它只显示设备的信息。 – Michael1
如果你曾跟随JPA的文档,你会知道,加入跨关系去。对于人们建议你的加入应该是什么,你需要发布的实体,显示的关系,并显示你已经尝试了什么 –
我更新帖子,如你所说,先生, – Michael1
你为什么删除你的答案? – Michael1