2013-04-16 1 views
1

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 
} 

Répondre

0

setParameter accepte soit (int position,Object value) ou (String parameterName,Object value). Donc, votre code pourrait ressembler à:

Date aDate=.... 
Long anId=.... 
List ListOfInterventions = em.createNamedQuery("Intervention.findNextMission") 
    .setParameter("DateToBeSpecified",aDate,avax.persistence.TemporalType,DATE) 
    .setParameter("idAgent",anId).getResultList(); 

Notez que lorsque vous utilisez un Date vous devez spécifier le TemporalType prévu.

+0

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

+0

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) –

+0

Merci beaucoup Carlo, ça marche maintenant !! – mounaim

Questions connexes