Witam
jak poprzednio pisałem, tworzę aplikacje w Netbeans 6.9 przy użyciu JSF 2.0(Mojarra), EJB i JPA(EclipseLink) przy użyciu serwera GlassFish oraz na bazie PostgreSQL(8.4.3).
Mam sobie taką encje:
@Entity
@Table(name = "connections")
@NamedQueries({
@NamedQuery(name = "Connection.findAll", query = "SELECT c FROM Connection c"),
@NamedQuery(name = "Connection.findById", query = "SELECT c FROM Connection c WHERE c.id = :id"),
@NamedQuery(name = "Connection.findBySource", query = "SELECT c FROM Connection c WHERE c.source = :source"),
@NamedQuery(name = "Connection.findByDestination", query = "SELECT c FROM Connection c WHERE c.destination = :destination"),
@NamedQuery(name = "Connection.findByCalendarDate", query = "SELECT c FROM Connection c WHERE c.calendarDate = :calendarDate"),
@NamedQuery(name = "Connection.findByType", query = "SELECT c FROM Connection c WHERE c.type = :type"),
@NamedQuery(name = "Connection.findByIsActive", query = "SELECT c FROM Connection c WHERE c.isActive = :isActive"),
@NamedQuery(name = "Connection.findBySourceDestination", query = "SELECT c FROM Connection c WHERE c.destination = :destination AND c.source = :source"),
@NamedQuery(name = "Connection.findBySourceDestinationCalendarDate", query = "SELECT c FROM Connection c WHERE c.source = :source AND c.destination = :destination AND c.calendarDate = :calendarDate")})
public class Connection implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Column(name = "source")
private String source;
@Column(name = "destination")
private String destination;
@Column(name = "calendar_date")
@Temporal(TemporalType.DATE)
private Date calendarDate;
@Column(name = "type")
private String type;
@Column(name = "is_active")
private String isActive;
@OneToMany(mappedBy = "connection")
private List<CustomerChoice> customerChoiceList;
@JoinColumn(name = "id_personnel", referencedColumnName = "id")
@ManyToOne
private StaffInfo staffInfo;
@OneToMany(mappedBy = "connection")
private List<PriceList> priceListList;
//////////////////////////////////////////////////////// dalej są gettery i settery plus te metody
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Connection)) {
return false;
}
Connection other = (Connection) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "kkp.model.Connection[id=" + id + "]";
}
}
Mam sobie beana @stateless ConnectionFacade
a w nim metode:
public List<Connection> getPossibleFlights(String source, String destination, Date calendarDate) {
Query q = em.createNamedQuery("Connection.findBySourceDestinationCalendarDate");
//Query q = em.createNamedQuery("Connection.findBySourceDestination");
q.setParameter("source",source);
q.setParameter("destination",destination);
q.setParameter("calendarDate",calendarDate);
List<Connection> u = q.getResultList();
return u;
}
W ManagedBeanie mam cos takiego:
public List<Connection> getPossibleConnections() {
String source = this.findCityName(this.sourceCityString);
String destination = this.findCityName(this.destinationCityString);
// tutaj jest taki dziwny format daty ze trzeba odjac 1900, zrodlo javadoc
int yearD = Integer.parseInt(year) - 1900;
Date calendarDate = new Date(yearD, Integer.parseInt(month), Integer.parseInt(day));
return connectionFacade.getPossibleFlights(source, destination, calendarDate);
}
W zależności od tego czy odejmiemy 1900 od roku czy nie odejmę to i tak nie zwraca żadnych wyników.
http://i.imgur.com/B9p1a.jpg
Natomiast jak sobie zakomentuje date i zastosuje
@NamedQuery(name = "Connection.findBySourceDestination", query = "SELECT c FROM Connection c WHERE c.destination = :destination AND c.source = :source")
To wszystko jest ok i zwraca poprawny wynik:
http://i.imgur.com/JAb9A.jpg
Próbowałem także na "sztywno" wstawić wartości np
int year=2010;
int month=1;
int day=1;
Date calendarDate = new Date(year, month, day);
albo
Date calendarDate = new Date(year-1900, month, day);
Ale nadal bez skutku.
Jakieś pomysły?
PS jeśli chodzi o datę to korzystam z
import java.util.Date;