この例で「lastAccessed」の日付がデータベースに保存されない理由と、それをDBに保存する方法を誰かが説明できますか?私の理解では、doオブジェクトはsave()呼び出しの後にアタッチされたオブジェクトであるため、すべての変更は自動的に永続化される必要があります。
注:「myDate」は正しく保持されているため、他のすべてのSpring構成は正しいようです。
@Transactional(readOnly = false)
public DateObject getOrCreateDateObject(Date myDate) {
DateObject do = null;
do = getCurrentDateObject(); // For my tests, this has been returning null
if (do == null) {
// create a new object
do = new DateObject();
do.setDate(myDate);
sessionFactory.getCurrentSession().save(do);
}
// This does not persist to the database
do.setLastAccessed(new Date());
return do;
}
また、save()呼び出しの後で、次の組み合わせのいくつか(およびそれ以上)を試しました。これらの作業はありません:
sessionFactory.getCurrentSession().merge(do); // tried before and after do.setDate(d2)
sessionFactory.getCurrentSession().update(do);
sessionFactory.getCurrentSession().saveOrUpdate(do);
sessionFactory.getCurrentSession().flush();
DateObject doCopy = (DateObject)sessionFactory.getCurrentSession().load(DateObject.class, do.getId());
sessionFactory.getCurrentSession().merge(doCopy);
doCopy.setLastAccessed(new Date());
これが私が見ていなかった簡単な答えであることを願っています。ご協力ありがとうございました!
編集#12012年5月22日
要求に応じて、src / main / resources / META-INF/dateobject.hbm.xmlで指定されているこのエンティティのマッピングを次に示します。mysqlクライアントで「SELECT*FROMdateObjects」を使用してデータベースに列が作成されていることがわかります。MY_DATEは正しく入力されていますが、LAST_ACCESSEDはNULLに設定されています。
<class name="com.example.entity.DateObject" table="dateObjects">
<id name="id" column="DATE_OBJECT_ID">
<generator class="identity" />
</id>
<property name="date" type="date" column="MY_DATE" />
<property name="lastAccessed" type="date" column="LAST_ACCESSED" />
</class>
編集#22012年5月24日
https://github.com/eschmidt/dateobjectに動作するSSCCEがあります。興味深いことに、Webクライアント(localhost:8080 / view / testを呼び出す)はlastAccessedが正しく設定されていることを示していますが、MySQLクライアントでデータベースを確認すると、lastAccessedがNULLであることが示されています。この完全なコードセットを使用すると、メソッドが@Transactionalとマークされているのに、データベースが更新されない理由を誰かが理解できますか?