je le namedquery suivant sur mon entité « Intervention »:En passant deux paramètres à une requête nommée
@NamedQuery(name = "Intervention.findNextMission", query = " SELECT i FROM Intervention i WHERE i.heureDebut> :DateToBeSpecified and i.idAgent= :idAgent")`
je ne sais pas comment appeler cette requête dans mon code en passant deux paramètres: la date, id. Normalement, il devrait ressembler à ceci:
List <Intervention> ListOfInterventions = em.createNamedQuery("Intervention.findNextMission").setParameter().getResultList();
quoi mettre entre les parenthèses de setParameter() ??
ici suivent le code de mon entité Intervention:
@Entity
@Table(name = "intervention")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Intervention.findAll", query = "SELECT i FROM Intervention i"),
@NamedQuery(name = "Intervention.findByIdIntervention", query = "SELECT i FROM Intervention i WHERE i.idIntervention = :idIntervention"),
@NamedQuery(name = "Intervention.findByHeureDebut", query = "SELECT i FROM Intervention i WHERE i.heureDebut = :heureDebut"),
@NamedQuery(name = "Intervention.findByHeureFin", query = "SELECT i FROM Intervention i WHERE i.heureFin = :heureFin"),
@NamedQuery(name = "Intervention.findNextMission", query = " SELECT i FROM Intervention i WHERE i.heureDebut> :DateToBeSpecified and i.idAgent= :idAgent")})
public class Intervention implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "IdIntervention", nullable = false, length = 50)
private String idIntervention;
@Basic(optional = false)
@NotNull
@Column(name = "HeureDebut", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date heureDebut;
@Basic(optional = false)
@NotNull
@Column(name = "HeureFin", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date heureFin;
@Lob
@Size(max = 65535)
@Column(name = "NotesGeneral", length = 65535)
private String notesGeneral;
@JoinColumn(name = "IdValidation", referencedColumnName = "IdValidation", nullable = false)
@ManyToOne(optional = false)
private Tablevalidation idValidation;
@JoinColumn(name = "IdNatureIntervention", referencedColumnName = "IdNatureIntervention", nullable = false)
@ManyToOne(optional = false)
private Tablenatureintervention idNatureIntervention;
@JoinColumn(name = "IdAgent", referencedColumnName = "IdAgent", nullable = false)
@ManyToOne(optional = false)
private Agent idAgent;
@JoinColumn(name = "RefContrat", referencedColumnName = "RefContrat", nullable = false)
@ManyToOne(optional = false)
private Projet refContrat;
public Intervention() {
}
//getters and setters
}
Salut Carlo j'ai essayé ceci mais cela ne fonctionne pas, il jette l'exception suivante: javax.servlet.ServletException: java.lang.IllegalArgumentException: Vous avez essayé de définir une valeur de type java.lang.String de classe pour le paramètre idAgent avec le type attendu de classe MajanTelepointage.entities.Agent de la chaîne de requête SELECT i FROM Intervention i Où i.heureDebut>: DateToBeSpecified et i.idAgent =: idAgent. – mounaim
Désolé, je n'ai pas creusé dans votre objet 'Intervention'. 'Intervention.idAgent' est en fait une instance' Agent', donc je vous suggère de modifier la requête pour référencer l'identifiant sur le type 'Agent' comme dans' ... i.idAgent.idAgent =: idAgent ... '(en supposant que 'Agent.idAgent' est une chaîne) –
Merci beaucoup Carlo, ça marche maintenant !! – mounaim