Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用或运算符进行HQL查询_Java_Sql_Hibernate_Jakarta Ee_Jpa - Fatal编程技术网

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

Java 如何使用或运算符进行HQL查询,java,sql,hibernate,jakarta-ee,jpa,Java,Sql,Hibernate,Jakarta Ee,Jpa,我在usilizateur和Projet之间有很多关系,我想提取项目实体中不存在的所有用户或分配给已完成项目的用户 那么这就是我的疑问: select u from Utilisateur u where u.projets is empty or u.projets.status like 'Completed'" 这就是利用我们的实体: @Entity public class Utilisateur implements Seria

我在
usilizateur
Projet
之间有很多关系,我想提取项目实体中不存在的所有用户或分配给已完成项目的用户 那么这就是我的疑问:

select u 
    from Utilisateur u 
    where 
        u.projets is empty or 
        u.projets.status like 'Completed'"
这就是
利用我们的
实体:

@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;

}
@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>
使用左联接生成的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'
检查“Projet”类中是否有输入错误-它显示的是statut,而不是status…

尝试以下查询:

select u 
from Utilisateur u 
left join u.projets p
where 
    p is null or 
    p.statut like 'Completed'"
请参见,您需要在使用属性之前加入。
join
left join
之间的区别在于
left join
get all
usilizateur
,包括那些没有项目的项目


更改
为空
因为
为空
,现在,在我的本地测试中运行良好!,有关完整示例,请参见

查询似乎有效,请添加由hibernate生成的sql和真正的问题。我编辑了我的帖子,现在您可以看到堆栈跟踪和调用此查询的方法错误说明您的实体
项目
没有
状态
属性,请添加
项目
实体的相关部分。您的财产是
状态
而不是
状态
,将您的HQL更改为
u.projets.statit like'Completed'
@AVlope:检查新错误谢谢回复,很抱歉拼写错误,但我有另一个错误现在的问题是它没有显示项目实体中不存在的用户相同的问题查看编辑我将显示生成的sql查询生成的子选择错误,是一个全选表单项目,您的实体定义有问题,我正在搜索!。
select u 
from Utilisateur u 
left join u.projets p
where 
    p is null or 
    p.statut like 'Completed'"