Java JPA坚持错误的日历日期
我有一个名为Period的类,它有Java JPA坚持错误的日历日期,java,hibernate,oop,jpa,Java,Hibernate,Oop,Jpa,我有一个名为Period的类,它有initialDate和endDate以及TemporalType=DATE注释(日历属性)。我试图用JPA来坚持它,但显然Hibernate并没有做到正确 这些是属性: @Temporal(TemporalType.DATE) private Calendar dataInicial; // initialDate @Temporal(TemporalType.DATE) private Calendar dataFinal; // endDate 我试着这
initialDate
和endDate
以及TemporalType=DATE
注释(日历属性)。我试图用JPA来坚持它,但显然Hibernate并没有做到正确
这些是属性:
@Temporal(TemporalType.DATE)
private Calendar dataInicial; // initialDate
@Temporal(TemporalType.DATE)
private Calendar dataFinal; // endDate
我试着这样设置:
Periodo periodo = new Periodo();
periodo.setDataInicial(Calendar.getInstance());
Calendar dataFinal = periodo.getDataInicial();
dataFinal.add(Calendar.MONTH, 6);
periodo.setDataFinal(dataFinal);
em.persist(periodo);
当我计算出所有值时,它工作得非常好,但在数据库中它被记录为:
+----+------------+-------------+
| id | dataFinal | dataInicial |
+----+------------+-------------+
| 5 | 2017-10-03 | 2017-10-03 |
+----+------------+-------------+
如果我设置Calendar dataFinal=Calendar.getInstance()代码>它可以正常工作并按照我的要求保持:
+----+------------+-------------+
| id | dataFinal | dataInicial |
+----+------------+-------------+
| 6 | 2017-10-03 | 2017-04-03 |
+----+------------+-------------+
为什么??我认为这更像是一个Java/OOP问题,所以我将在标记中继续使用它
Calendar.getInstance()
这将返回日历的一个实例
periodo.setDataInicial(Calendar.getInstance());
这会将日历对象指定给datainical
,当您说
Calendar dataFinal = periodo.getDataInicial();
由datainical
参照的日历对象被指定给dataFinal
。因此在此之后,对datainical
或dataFinal
所做的更改将反映在这两个字段中
OOP中没有缺陷java.util.Calendar
是可变的。您已将同一对象分配给两个字段,然后对该对象进行了变异。那么,管理不同日期的最佳方法是什么?我有一个有用户输入的初始日期,但结束日期总是6个月后。为什么需要日历?为什么不使用Date呢?这是项目开始时的一个开发缺陷。现在,每个日期处理程序都是一个日历对象。那么,我是否可以轻松设置它?