2017-04-03 98 views
0

我有一個名爲Period的類,它具有initialDateendDate以及TemporalType=DATE註釋(日曆屬性)。我試圖堅持它與JPA,但顯然休眠是不是管理做正確。JPA持續錯誤日曆日期

這些屬性:

@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); 

當我SYSOUT所有值它工作完全正常,但在數據庫中它是記錄爲:

+----+------------+-------------+ 
| 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

'java.util.Calendar'是可變的。您已將相同的對象分配給兩個字段,然後突變該對象。 –

+0

那麼管理不同日期的最佳方法是什麼?我有一個有用戶輸入的initialDate,但endDate總是6個月後。 –

+0

爲什麼你需要日曆?爲什麼不使用日期? –

回答

0
Calendar.getInstance() 

這將返回日曆

periodo.setDataInicial(Calendar.getInstance()); 

的情況下這種分配日曆對象dataInicial當你說

Calendar dataFinal = periodo.getDataInicial(); 

這是由dataInicial reffed的日曆對象分配給dataFinal。因此,在此之後,您爲dataInicialdataFinal所做的更改都反映在這兩個字段中。

OOP中沒有缺陷