我正在尝试将日历滚动一周,并使用Hibernate将其保留。滚动工作(使用 println 测试),但保存在数据库中的数据似乎是原始日历。
Calendar outDate = Calendar.getInstance();
System.out.println(outDate.getTime());
Loan loan = new Loan();
loan.setCatalogueEntry(catalogueEntry);
loan.setOutDate(outDate);
loan.setNoOfRenewals(0);
outDate.add(Calendar.WEEK_OF_YEAR, 1); //Rolling the calendar to a week further
System.out.println(outDate.getTime());
loan.setDueDate(outDate);
loan.setUser(user);
loanDao.save(loan);
catalogueEntryDao.update(catalogueEntry);
GenericHibernateDao<T, ID extends Serializable> implements GenericDao<T, ID>
类有以下方法:
@Override
public void save(T instance) {
getSessionFactory().getCurrentSession().save(instance);
}
public interface LoanDao extends GenericDao<Loan, Long>
没有任何save方法的实现。
我的代码有什么问题?
答案 0 :(得分:1)
您在dueDate和outDate中设置了相同的Calendar实例!设置outDate时,日历就是例如在2012-07-02,然后您将日历值更新为2012-07-09,并将其存储在dueDate中。
问题是,同一个日历实例也用于outDate,所以当Hibernate持久保存你的对象时,它会完全正确地存储它,因为两个属性共享同一个Calendar对象。
在更新日历之前克隆日历,您的问题就解决了。
AND:存储在数据库中的日期都是dueDate日历的时间,而不是您发布的原始日历!
答案 1 :(得分:0)