滚动日历未按预期保留



我正在尝试按一周滚动一个日历,并使用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>没有任何保存方法的实现。

我的代码有什么问题?

您在dueDate和outDate中设置了相同的日历实例!当你设置了outDate,日历是例如2012-07-02,然后你更新日历值为2012-07-09,并将其存储在dueDate中。

问题是,outDate也使用了相同的日历实例,所以当Hibernate持久化您的对象时,它会完全正确地存储它,因为两个属性共享相同的calendar对象。

在更新之前先克隆日历,你的问题就解决了。

AND:数据库中存储的日期是dueDate日历的两倍,而不是您发布的原始日历!

roll不能改变较大的字段(参见JavaDoc)

使用

outDate.add(Calendar.WEEK_OF_YEAR, 1);
相反,

最新更新