struts2に、データベースにオブジェクトを照会し、いくつかの変更を加えてコピーするアクションがあります。次に、コピーから新しいobjectIDを取得し、objectID.txtというファイルを作成する必要があります。
ここに関連するコードがあります:
アクションクラス:
ObjectVO objectVOcopy = objectService.searchObjects(objectId);
//Set the ID to 0 so a new row is added, instead of the current one being updated
objectVOcopy.setObjectId(0);
Date today = new Date();
Timestamp currentTime = new Timestamp(today.getTime());
objectVOcopy.setTimeStamp(currentTime);
//Add copy to database
objectService.addObject(objectVOcopy);
//Get the copy object's ID from the database
int newObjectId = objectService.findObjectId(currentTime);
File inboxFile = new File(parentDirectory.getParent()+"\\folder1\\folder2\\"+newObjectId+".txt");
ObjectDAO
//Retrieve identifying ID of copy object from database
List<ObjectVO> object = getHibernateTemplate().find("from ObjectVO where timeStamp = ?", currentTime);
return object.get(0).getObjectId();
問題は、多くの場合、ObjectDAO検索メソッドが何も返さないことです。デバッグしているときに、渡されるタイムスタンプcurrentTimeは、通常、データベースの値から約1〜2ミリ秒ずれていることに気付きました。このバグを回避して、渡されたタイムスタンプから3ミリ秒以内のタイムスタンプを持つオブジェクトを検索するようにHibernateクエリを変更しましたが、この不一致がどこから来ているのかわかりません。currentTimeを再計算していません。データベースに書き込むのと同じものを使用して、データベースから取得します。また、これを別のサーバーにデプロイすると、差異が大きくなる可能性があることも心配しています。objectIDを除いて、これは唯一の一意の識別子であるため、コピーオブジェクトを取得するためにそれを使用する必要があります。
なぜこれが発生しているのか誰かが知っていますか?単に範囲を検索するよりも良い回避策がありますか?私はMicrosoftSQLServer2008R2を使用しています。
ありがとう。