What is the correct way to set a Date property to null such that both Java and SQL will treat/see it as null.
Thanks in advance - Richard
Hibernate version:
2.1.8
Mapping documents:
Code:
<hibernate-mapping>
<class name="com.acme.persistence.PoMeasurementItem" table="PoMeasurementItem" proxy="com.acme.persistence.PoMeasurementItem" dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version" >
<id name="id"type="long" unsaved-value="null" >
<column name="id" unique-key="id" />
<generator class="native"></generator>
</id>
<version name="version" type="int"
column="version" access="property" unsaved-value="undefined" />
<many-to-one name="measurementItemSet" class="com.acme.persistence.PoMeasurementItemSet"
cascade="none" outer-join="true" update="true" insert="true"
access="property" >
<column name="measurementItemSet" unique-key="userkey" />
</many-to-one>
<property name="liNum" type="int" update="true" insert="true"
access="property" column="liNum" />
<property name="reviewDate" type="java.sql.Date"
update="true" insert="true" access="property" >
<column name="reviewDate" unique-key="userkey" />
</property>
<set name="assessmentItems" table="PoAssessmentItem" lazy="true"
inverse="true" cascade="all" sort="unsorted" >
<key column="measurementItem"></key>
<one-to-many class="com.acme.persistence.PoAssessmentItem" />
</set>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
...
java.sql.Date reviewDate = null;
for (int i=0; i<ps.getProblemCt();i++) {
PoMeasurementItem mi = new PoMeasurementItem();
mi.setLiNum(i);
mis.addMeasurementItem(mi);
mi.setReviewDate(reviewDate);
}
...
if (cmMI != null) {
userTx.getSession().save(cm.getMeasurementParms());
userTx.getSession().save(cm);
userTx.getSession().flush();
}
...
Later the check below to see if the ReviewDate is null fails:
Code:
PoMeasurementItem measurementItem = ai.getMeasurementItem();
if (reviewItem && measurementItem.getReviewDate() == null ) {
measurementItem.setReviewDate(assessment.getAssessmentDate());
}
Also, the query
select * from PoMeasurementItem where reviewDate is null ;
returns no rows from the database as they are all set to '1969-12-31'.
Full stack trace of any exception that occurs:No exception - but value of 1969-12-31 is stored in the database.
Name and version of the database you are using:MySQL 4.1.7
The generated SQL (show_sql=true):Code:
create table PoMeasurementItemSet (
id BIGINT NOT NULL AUTO_INCREMENT,
version INTEGER not null,
classMeasurement BIGINT not null,
problemSet BIGINT not null,
lisNum INTEGER not null,
primary key (id),
unique (classMeasurement, problemSet)
) type=InnoDB ;
Debug level Hibernate log excerpt:
N/A