JPA持续错误的日历日期

时间:2017-04-03 14:55:33

标签: java hibernate oop jpa

我有一个名为Period的类,其中initialDateendDate带有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问题,所以我会在标签中坚持使用它。

1 个答案:

答案 0 :(得分:0)

Calendar.getInstance()

这将返回Calender的实例

periodo.setDataInicial(Calendar.getInstance()); 

这会将Calender对象分配给dataInicial,当您说

Calendar dataFinal = periodo.getDataInicial();

dataInicial提供的日历对象已分配给dataFinal。因此,在此之后,您为dataInicialdataFinal所做的更改会反映在两个字段中。

OOP中没有任何缺陷