Curios hibernate behavior
wachtda.scsi.gmx.ch Mar 10, 2008 2:29 PMHello together
Maybe I must post this in a hibernate forum, but before seam I never noticed a similar behavior.
I just noticed some strange hibernate behavior when I select a list of objects:
My bean:
List<Alert> m_LastAlerts = m_EM.createQuery("SELECT a FROM Alerts a").getResultList();
for(Alert alert : m_LastAlerts) {
System.out.println("ALERT: " + alert.getID() + " / " + alert.getDateTime());
}My output:
13:43:35,191 INFO [STDOUT] ALERT: 1 / 2008-03-10 13:42:58.0 13:43:35,191 INFO [STDOUT] ALERT: 2 / 2008-03-09 13:42:58.0 13:43:35,192 INFO [STDOUT] ALERT: 3 / 2008-03-10 13:42:58.0
But the data in my database has the following data:
ALERT: 1 / 2008-03-08 ALERT: 2 / 2008-03-09 ALERT: 3 / 2008-03-10
The Query from hibernate is correct (And would return the right dates) but it seams that hibernate takes a cached date for creating a new object!
If I make a Limit on the query (e.g. Limit 2) the date comes correct!
Any suggestions for me? Should I better post this problem in a hibernate forum or is my question stupid?
Thank you
My Entities:
Dysfunction.java:
@MappedSuperclass
public abstract class Dysfunction implements Serializable {
private long m_ID;
private Date m_DateTime;
@Id
@GeneratedValue
@Column(name = "id")
public long getID() {
return m_ID;
}
/**
*
* @param p_ID
* ID of the Dysfunction
*/
public void setID(long p_ID) {
m_ID = p_ID;
}
@NotNull
@Basic
@Temporal(TemporalType.TIMESTAMP)
public Date getDateTime() {
return m_DateTime;
}
/**
*
* @param p_DateTime
* Date and time when the dysfunction occured
*/
public void setDateTime(Date p_DateTime) {
m_DateTime = p_DateTime;
}
@NotNull
public int getAlertBit() {
return m_AlertBit;
}
}Alert.java
@Entity
@Table(name = "alert")
@Name("alert")
public class Alert extends Dysfunction implements Serializable {
private boolean m_Generated;
private Causation m_Causation;
private AlertSetting m_AlertSetting;
/**
* Default Constructor
*/
public Alert() {
}
@ManyToOne
@NotNull
public Causation getCausation() {
return m_Causation;
}
/**
*
* @param p_Causation
* Causation of the alert
*/
public void setCausation(Causation p_Causation) {
m_Causation = p_Causation;
}
@ManyToOne
public AlertSetting getAlertSetting() {
return m_AlertSetting;
}
/**
*
* @param p_AlertSetting
* AlertSetting of the alert
*/
public void setAlertSetting(AlertSetting p_AlertSetting) {
m_AlertSetting = p_AlertSetting;
}
public boolean isGenerated() {
return m_Generated;
}
/**
*
* @param p_Generated
* Generated flag of the alert
*/
public void setGenerated(boolean p_Generated) {
m_Generated = p_Generated;
}
}My Import script:
INSERT INTO alert (dateTime, generated, causation_id) VALUES (DATE_SUB(sysdate(), INTERVAL 2 DAY), 0, 1) INSERT INTO alert (dateTime, generated, causation_id) VALUES (DATE_SUB(sysdate(), INTERVAL 1 DAY), 0, 1) INSERT INTO alert (dateTime, generated, causation_id) VALUES (sysdate(), 0, 1)