我有一个名为Period的类,其中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问题,所以我会在标签中坚持使用它。
答案 0 :(得分:0)
Calendar.getInstance()
这将返回Calender的实例
periodo.setDataInicial(Calendar.getInstance());
这会将Calender对象分配给dataInicial
,当您说
Calendar dataFinal = periodo.getDataInicial();
由dataInicial
提供的日历对象已分配给dataFinal
。因此,在此之后,您为dataInicial
或dataFinal
所做的更改会反映在两个字段中。
OOP中没有任何缺陷