【发布时间】:2014-07-18 10:33:02
【问题描述】:
我在Utilisateur 和Projet 之间有ManyToMany 关系,我想提取项目实体中不存在的所有用户以及分配给“Terminé”(statut 值:Projet 属性)项目的用户这是我的查询:
select u from Utilisateur u left join u.projets p where p is null and p.statut like 'Terminé'
生成的 sql 查询:
Hibernate: select utilisateu0_.iduser as iduser5_, utilisateu0_.datederniereconnexion as datedern2_5_, utilisateu0_.email as email5_, utilisateu0_.grade as grade5_, utilisateu0_.login as login5_, utilisateu0_.mdp as mdp5_, utilisateu0_.nomuser as nomuser5_, utilisateu0_.tel as tel5_ 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 (projet2_.idprojet is null) and
(projet2_.statut like 'Terminé')
这是我的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;
}
这是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;
}
问题是它没有显示任何用户
【问题讨论】:
-
您选择的是表别名,而不是选择语句中的任何列。在您的选择语句中,它应该类似于
U.ColumnName而不仅仅是U。 -
left join u.projets p看起来也不正确,如果是,则您缺少ON语句。您能否向我们展示您的表格结构,以便我们更好地帮助您? -
我根本看不出该查询是如何工作的。 Hibernate 查询与您发布的查询不同。但我看到的最大问题是你是
outer join。您正在加入 idprojet,但随后检查它是否为空,然后检查同一个表中的另一个字段是否等于某个值... -
抱歉,我对休眠帮助不大,但是您的
HQL代码有问题。您确定要检查OUTER JOIN和null吗?尝试删除它们,因为它们否定 `p.statut like 'Terminé'`。 -
我想提取没有任何项目的用户以及拥有该项目状态为“Terminé”的项目的用户
标签: java sql hibernate jakarta-ee jpa