2017-04-03 8 views
0

私はinitialDateendDateTemporalType=DATEアノテーション(カレンダー属性)を持つクラスという名前のクラスを持っています。私はJPAでそれを維持しようとしていますが、明らかにHibernateはそれを正しく行うことができません。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に割り当てられます。この後、dataInicialまたはdataFinalのいずれかの変更が両方のフィールドに反映されます。

OOPに欠陥はありません

関連する問題