Mysql 如何在JPQL中加入三个类?
我有以下课程:Mysql 如何在JPQL中加入三个类?,mysql,jpa,jpql,Mysql,Jpa,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 C
@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;
}
我跟踪了internet上的文档,但没有在JPQL中获得查询的正确转换
以下查询仅显示在类响应检查列表中回答的检查列表:
@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"
)
@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"
)
[
{
"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
}
此请求不显示“CheckLists”类的所有检查表和已应答的检查表(可在“responseChecklists”类中找到)
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的错误:
1-Servlet.service(),用于具有的上下文中的Servlet[dispatcherServlet]
路径[/App]引发异常[请求处理失败;嵌套
例外是
org.springframework.http.converter.HttpMessageNotWritableException:
无法写入内容:无限递归(StackOverflower错误)
2-3456---[nio-8099-exec-3]
.w.s.m.s.DefaultHandlerException解析器:处理
[org.springframework.http.converter.HttpMessageNotWritableException]
导致异常java.lang.IllegalStateException:无法调用
提交响应后的sendError()
错误Edit2的解决方案;
添加注释@JsonIgnore
@JsonIgnore
Public Set <CheckLists> getChecks ()
{
Return checks;
}
Edit3的结果:
@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"
)
@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"
)
[
{
"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查询,以显示已回答(答案在“ResponseCheckList”类中)和尚未回答(列表的其余部分在“CheckList”类中)的检查表列表。但我的测试显示设备对象加倍
谢谢大家,
"SELECT e "
+" FROM Equipements "
+" LEFT JOIN fetch e.checks c "
+" LEFT JOIN fetch c.ResponsesChecks r"
+" WHERE ...."
这将返回已获取集合的实体
这将返回集合已获取的实体如果您遵循JPA文档,您将知道连接跨越关系。要让人们建议您的连接应该是什么,您也需要发布实体,显示关系,并显示您已尝试的内容。如您所说,先生,您为什么要删除您的连接回答??如果你关注过JPA文档,你就会知道连接跨越关系。要让人们建议你的连接应该是什么,你也需要发布实体,显示关系,并显示你所做的。正如你所说的,先生,你为什么要删除你的回答?谢谢你的回答,先生,但这显示了以下内容问题:
原因:org.hibernate.loader.MultipleBagFetchException:无法同时提取多个行李:[com.SSC.DAO.Entities.equipments.checks,com.SSC.DAO.Entities.checklist.responseChecks]
这对我来说也是新的…这里有一些不同的解决方案感谢链接,join fetch的问题已经解决。关于请求,我尝试执行您的建议,它只显示设备的信息。当您说display是什么意思?您发出的请求返回设备类的对象:`{“idEquipements”:1,“nomEq”:“xd”,“DateAjoteq”:“2017/04/09 20:37:58”,“dateModificationEq”:“2017/04/09 20:48:40”},`谢谢您的回答,先生,但这显示了以下问题:由以下原因引起:
这对我来说也是新的…这里有一些不同的解决方案,感谢链接,join fetch解决了问题。关于请求,我尝试执行您的建议,它只显示设备的信息。当您说display是什么意思?您发出的请求返回设备类的对象:`{”理想要素:1,“nomEq”:“xd”,“dateajoteq”:“2017/04/09 20:37:58”,“dateModificationEq”:“2017/04/09 20:48:40”`