0

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

我的代码有什么问题?

4

2 回答 2

1

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

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

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

并且:存储在数据库中的日期都是到期日期日历的时间,而不是您发布的原始日历!

于 2013-05-02T17:59:36.007 回答
0

roll 不会改变更大的字段(参见 JavaDoc

利用

outDate.add(Calendar.WEEK_OF_YEAR, 1);

反而

于 2013-04-29T11:48:43.203 回答