Передача двух параметров в именованный запрос

У меня есть следующий именованный запрос по моей сущности «Вмешательство»:

 @NamedQuery(name = "Intervention.findNextMission", query = " SELECT i FROM Intervention  i       WHERE i.heureDebut> :DateToBeSpecified and i.idAgent= :idAgent")`

я не знаю, как вызвать этот запрос в моем коде, передав два параметра: дату, идентификатор. В норме должно быть так:

List <Intervention> ListOfInterventions = em.createNamedQuery("Intervention.findNextMission").setParameter().getResultList();

что поставить между скобками setParameter() ??

здесь следуйте коду моего вмешательства сущности:

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

person mounaim    schedule 16.04.2013    source источник


Ответы (1)


setParameter принимает либо (int position,Object value), либо (String parameterName,Object value). Таким образом, ваш код может выглядеть так:

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

Обратите внимание, что когда вы используете Date, вы должны указать предполагаемый TemporalType.

person Carlo Pellegrini    schedule 16.04.2013
comment
Привет, Карло, я пробовал это, но это не работает, оно выдает следующее исключение: javax.servlet.ServletException: java.lang.IllegalArgumentException: вы попытались установить значение класса типа java.lang.String для параметра idAgent с ожидаемым тип класса MajanTelepointage.entities.Agent из строки запроса SELECT i FROM Intervention i WHERE i.heureDebut› :DateToBeSpecified and i.idAgent= :idAgent. - person mounaim; 16.04.2013
comment
Извините, я не копался в вашем объекте Intervention. Intervention.idAgent на самом деле является экземпляром Agent, поэтому я предлагаю вам изменить запрос, чтобы он ссылался на идентификатор типа Agent, как в `... i.idAgent.idAgent=:idAgent... ` (при условии, что Agent.idAgent является строкой) - person Carlo Pellegrini; 16.04.2013