我在 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");
对象DAO
//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 毫秒内的对象,但我不确定这种差异来自何处。我没有重新计算当前时间;我使用同一个从数据库中检索,就像我写入数据库一样。我还担心当我将它部署到另一台服务器时,差异可能会更大。除了 objectID,这是唯一的唯一标识符,因此我需要使用它来获取复制对象。
有谁知道为什么会发生这种情况,是否有比仅搜索范围更好的解决方法?我正在使用 Microsoft SQL Server 2008 R2 顺便说一句。
谢谢。