Java 使用布尔函数从中选择

Java 使用布尔函数从中选择,java,hibernate,many-to-many,jpql,Java,Hibernate,Many To Many,Jpql,我正在尝试用JavaEE开发一个应用程序。下面是我想要实现的类图的一部分: 下面是hibernate类的实现: @Entity @Table(name = "t_enseignant") public class Enseignant extends User implements Serializable { private static final long serialVersionUID = 1L; private String specialite; priva

我正在尝试用JavaEE开发一个应用程序。下面是我想要实现的类图的一部分:

下面是hibernate类的实现:

@Entity
@Table(name = "t_enseignant")
public class Enseignant extends User implements Serializable {


private static final long serialVersionUID = 1L;

    private String specialite;
    private List<Module> modules;

    public Enseignant() {
    }

    public Enseignant(String nom, String prenom, String email, String login, String password, String specialite) {
        super(nom, prenom, email, login, password);
        this.setSpecialite(specialite);
    }

    public String getSpecialite() {
        return specialite;
    }

    public void setSpecialite(String specialite) {
        this.specialite = specialite;
    }

    @OneToMany(mappedBy = "enseignant")
    public List<Module> getModules() {
        return modules;
    }

    public void setModules(List<Module> modules) {
        this.modules = modules;
    }
}

@Entity
@Table(name = "t_classe")
public class Classe implements Serializable {

    private static final long serialVersionUID = 1L;

    private int id;
    private String niveau;
    private int nbreEtudiant;

    private List<Module> modules;

    public Classe() {
    }

    public Classe(String niveau, int nbreEtudiant) {
        this.niveau = niveau;
        this.nbreEtudiant = nbreEtudiant;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public int getId() {
        return id;
    }

...
@延斯

@Entity
@Table(name = "t_module")
public class Module implements Serializable {
private static final long serialVersionUID = 1L;

private ModulePk modulePk;
private String nomModule;
private int nbreHeure;
private Enseignant enseignant;
private Classe classe;

public Module() {
}

public Module(String nomModule, int nbreHeure, Enseignant enseignant, Classe classe) {
    this.nomModule = nomModule;
    this.nbreHeure = nbreHeure;
    this.enseignant = enseignant;
    this.classe = classe;
    this.modulePk = new ModulePk(enseignant.getId(), classe.getId());
}

@EmbeddedId
public ModulePk getModulePk() {
    return modulePk;
}

public void setModulePk(ModulePk modulePk) {
    this.modulePk = modulePk;
}

public String getNomModule() {
    return nomModule;
}

public void setNomModule(String nomModule) {
    this.nomModule = nomModule;
}

public int getNbreHeure() {
    return nbreHeure;
}

public void setNbreHeure(int nbreHeure) {
    this.nbreHeure = nbreHeure;
}

@ManyToOne
@JoinColumn(name = "idEnseignant", referencedColumnName = "id", insertable = false, updatable = false)
public Enseignant getEnseignant() {
    return enseignant;
}

public void setEnseignant(Enseignant enseignant) {
    this.enseignant = enseignant;
}

@ManyToOne
@JoinColumn(name = "idClasse", referencedColumnName = "id", insertable = false, updatable = false)
public Classe getClasse() {
    return classe;
}

public void setClasse(Classe classe) {
    this.classe = classe;
}
}

这是ModulePK类

@Embeddable
public class ModulePk implements Serializable {

private static final long serialVersionUID = 1L;

private int idEnseignant;
private int idClasse;

public ModulePk() {
}

public ModulePk(int idEnseignant, int idClasse) {
    this.setIdEnseignant(idEnseignant);
    this.setIdClasse(idClasse);
}
...
@延斯

@Entity
@Table(name = "t_module")
public class Module implements Serializable {
private static final long serialVersionUID = 1L;

private ModulePk modulePk;
private String nomModule;
private int nbreHeure;
private Enseignant enseignant;
private Classe classe;

public Module() {
}

public Module(String nomModule, int nbreHeure, Enseignant enseignant, Classe classe) {
    this.nomModule = nomModule;
    this.nbreHeure = nbreHeure;
    this.enseignant = enseignant;
    this.classe = classe;
    this.modulePk = new ModulePk(enseignant.getId(), classe.getId());
}

@EmbeddedId
public ModulePk getModulePk() {
    return modulePk;
}

public void setModulePk(ModulePk modulePk) {
    this.modulePk = modulePk;
}

public String getNomModule() {
    return nomModule;
}

public void setNomModule(String nomModule) {
    this.nomModule = nomModule;
}

public int getNbreHeure() {
    return nbreHeure;
}

public void setNbreHeure(int nbreHeure) {
    this.nbreHeure = nbreHeure;
}

@ManyToOne
@JoinColumn(name = "idEnseignant", referencedColumnName = "id", insertable = false, updatable = false)
public Enseignant getEnseignant() {
    return enseignant;
}

public void setEnseignant(Enseignant enseignant) {
    this.enseignant = enseignant;
}

@ManyToOne
@JoinColumn(name = "idClasse", referencedColumnName = "id", insertable = false, updatable = false)
public Classe getClasse() {
    return classe;
}

public void setClasse(Classe classe) {
    this.classe = classe;
}
}

这是ModulePK类

@Embeddable
public class ModulePk implements Serializable {

private static final long serialVersionUID = 1L;

private int idEnseignant;
private int idClasse;

public ModulePk() {
}

public ModulePk(int idEnseignant, int idClasse) {
    this.setIdEnseignant(idEnseignant);
    this.setIdClasse(idClasse);
}
...

您忘记了使用
来指示命名参数,因此您使用了
idEnseignant=idEnseignant
而不是
idEnseignant=:idEnseignant

以下是更正后的代码:

boolean exists = false;
String jpql = "select case when (count(m) > 0)  then true else false end  from Module m where m.idEnseignant=:idEnseignant and m.idClasse=:idClasse";
TypedQuery<Boolean> query = entityManager.createQuery(jpql, Boolean.class);
query.setParameter("idEnseignant", enseignant.getId());
query.setParameter("idClasse", classeToValidate.getId());
exists = query.getSingleResult();
return exists
boolean exists=false;
String jpql=“选择case when(count(m)>0),然后选择true或false结束模块m,其中m.idEnseignant=:idEnseignant和m.idClasse=:idClasse”;
TypedQuery query=entityManager.createQuery(jpql,Boolean.class);
setParameter(“idEnseignant”,enseignant.getId());
setParameter(“idClasse”,classeToValidate.getId());
exists=query.getSingleResult();
回报存在

您忘记了使用
来指示命名参数,因此您使用了
idEnseignant=idEnseignant
而不是
idEnseignant=:idEnseignant

以下是更正后的代码:

boolean exists = false;
String jpql = "select case when (count(m) > 0)  then true else false end  from Module m where m.idEnseignant=:idEnseignant and m.idClasse=:idClasse";
TypedQuery<Boolean> query = entityManager.createQuery(jpql, Boolean.class);
query.setParameter("idEnseignant", enseignant.getId());
query.setParameter("idClasse", classeToValidate.getId());
exists = query.getSingleResult();
return exists
boolean exists=false;
String jpql=“选择case when(count(m)>0),然后选择true或false结束模块m,其中m.idEnseignant=:idEnseignant和m.idClasse=:idClasse”;
TypedQuery query=entityManager.createQuery(jpql,Boolean.class);
setParameter(“idEnseignant”,enseignant.getId());
setParameter(“idClasse”,classeToValidate.getId());
exists=query.getSingleResult();
回报存在

模块
实体中,您将
模块pk
定义为主键。有两种可能使用此id:

  • 创建
    ModulePk
    类的实例,并将其传递给实体管理器的
    find()
    方法(在查询中不是这样),或者

  • 要在JPQL查询中使用它,必须遍历嵌入的id类。在您的情况下,请按如下方式使用:

    String jpql = "select case when (count(m) > 0)  then true else false end  from Module m where m.modulePk.idEnseignant = :idEnseignant and m.modulePk.idClasse = :idClasse";
    

在您的
模块
实体中,您将
模块pk
定义为主键。有两种可能使用此id:

  • 创建
    ModulePk
    类的实例,并将其传递给实体管理器的
    find()
    方法(在查询中不是这样),或者

  • 要在JPQL查询中使用它,必须遍历嵌入的id类。在您的情况下,请按如下方式使用:

    String jpql = "select case when (count(m) > 0)  then true else false end  from Module m where m.modulePk.idEnseignant = :idEnseignant and m.modulePk.idClasse = :idClasse";
    

请显示类域.Module请显示类域.Module