gpt4 book ai didi

java - 如何使用或运算符进行 HQL 查询

转载 作者:行者123 更新时间:2023-11-29 05:23:03 24 4
gpt4 key购买 nike

我在 UtilisateurProjet 之间存在多对多关系,我想提取项目实体中不存在的所有用户或分配给已完成项目的用户那么这是我的查询:

select u 
from Utilisateur u
where
u.projets is empty or
u.projets.status like 'Completed'"

这是 Utilisateur 实体:

@Entity
public class Utilisateur implements Serializable {

@Column(name = "iduser", nullable = false)
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
Integer iduser;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
schema = "public",
name = "join_membre_projet",
joinColumns = {
@JoinColumn(
name = "iduser",
referencedColumnName = "iduser",
nullable = false,
updatable = false) },
inverseJoinColumns = {
@JoinColumn(
name = "idprojet",
referencedColumnName = "idprojet",
nullable = false, updatable = false) })
List<Projet> projets;

}

这是 Projet 实体:

@Entity
public class Projet implements Serializable {

@Column(name = "idprojet", nullable = false)
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
Integer idprojet;

String statut;

@ManyToMany(
mappedBy="projets",
fetch = FetchType.LAZY)
List<Utilisateur> utilisateurs;
}

这是我的 xhtml 文件,其中包含调用 hql 查询的方法:

<p:dataTable id="checkboxDT" var="user" value="#{UtilisateurComponent.dispo()}" selection="#{ProjetComponent.projet.utilisateurs}" rowKey="#{user.iduser}" style="margin-bottom:0">

<f:facet name="header">
Affectation des ressources
</f:facet>
<p:column selectionMode="multiple" style="width:2%;text-align:center" />

<p:column headerText="Id">
<h:outputText value="#{user.iduser}" />
</p:column>
<p:column headerText="Nom">
<h:outputText value="#{user.nomuser}" />
</p:column>

</p:dataTable>
<h:panelGroup>
<p:commandButton image="save" ajax="false"
style="margin-right:20px;" value="#{projetmsgs['navigation.save']}"
action="#{ProjetComponent.saveProjetUtilisateurs1(ProjetComponent.projet, ProjetComponent.projet.utilisateurs)}" />
</h:panelGroup>

这是堆栈跟踪错误:

 org.hibernate.QueryException: illegal attempt to dereference collection [utilisateu0_.iduser.projets] with element property reference [statut] [select u from com.gestion.projet.domain.Utilisateur u where u.projets  is empty or  u.projets.statut like 'Completed' ]

使用左连接生成的 sql 查询:

 select * 
from public.utilisateur utilisateu0_
left outer join projet_utilisateur projets1_ on utilisateu0_.iduser=projets1_.utilisateurs_iduser
left outer join public.projet projet2_ on projets1_.projets_idprojet=projet2_.idprojet
where
not (exists (select projet2_.idprojet from public.projet projet2_)) or
projet2_.statut like 'Completed'

最佳答案

检查“项目”类中的拼写错误 - 它说的是状态,而不是状态...

关于java - 如何使用或运算符进行 HQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com