2017-08-13 13 views
0

私はjavaを初めて使い、java springプロジェクトに取り組んでいます。今私がやったことがデータベースに保存されていることを確認して、手動で値を挿入しています。代わりに、新しいオブジェクトを作成するJPAリポジトリを使用してオブジェクトを何度も何度も何度も上書きし、詳細をデータベースに保存できないのはなぜですか?

Department departmentDetails = new Department(); 
departmentDetails.setDepartmentName("cse"); 
departmentDetails.setStatus(1); 
departmentDetails.setModifiedBy("mehul"); 
departmentDetails.setCreatedBy("mehul"); 
departmentDetails.setCreatedOn(new Timestamp(System.currentTimeMillis())); 
departmentDetails.setModifiedOn(new Timestamp(System.currentTimeMillis())); 

departmentDetailsRepository.save(departmentDetails); 

departmentDetails.setDepartmentName("ECe"); 
departmentDetails.setStatus(1); 
departmentDetails.setModifiedBy("gowdru"); 
departmentDetails.setCreatedBy("gowdru"); 
departmentDetails.setCreatedOn(new Timestamp(System.currentTimeMillis())); 
departmentDetails.setModifiedOn(new Timestamp(System.currentTimeMillis())); 

departmentDetails = departmentDetailsRepository.save(departmentDetails); 

、私はデータベースにその詳細を保存した後、再びそれを使用しています:

のコードは次のようになります。 しかし、私がこれを実行すると、第2の詳細、すなわちECEが作成されます。 gowdruが保存されますが、最初のレコードは保存されません。

私はここで何が間違っていますか?

+0

ここでオーバーライドするオブジェクトはありません – Antoniossss

答えて

0

が、それはトランザクションのコミット時に、あなたのデータを保持してください。また、同じオブジェクトを使用している場合は、更新するだけで、saveをもう一度呼び出す必要はありません。 dbに2レコードを作成するには、現在のオブジェクトが永続状態にあるため、新しいオブジェクトを作成する必要があります。

+0

あなたは「保存メソッドを呼び出した後」と言っています。それで正確にそれが救われたら? –

+0

'save'メソッドを呼び出すだけでオブジェクトの状態が永続化されます。デフォルトではデータベースへのリクエストはトランザクションコミットがトリガされたときに送信されます。何らかの理由でこれを必要とする場合は' 。 –

0

「新しい」行を作成するには、新しいインスタンスを作成する必要があります。

0

これは間違った使い方です。

はHibernateが、実際にはない saveメソッドを呼び出した後に保存操作trigerringためです。この

Department departmentDetails = new Department(); 
...  
departmentDetailsRepository.save(departmentDetails); 

departmentDetails = new Department(); //Create a new object. 
...  
departmentDetails = departmentDetailsRepository.save(departmentDetails); 
関連する問題