我正在使用以下框架开发一个网络应用程序:
Spring 4.2.4.RELEASE
Hibernate 4.3.6.Final
MySQL Connector 5.1.31
Jackson 2.6.5
MySQL 5.7
我正在根据通过 JSP 捕获的用户输入创建新记录。
下面是使用hibernate插入一条新记录的代码
public Record addRecord(Record record) {
logger.info("Persisting new record : " + record);
Record createdRecord = null;
SessionFactory hibSessionFactory = HibernateUtil.getSessionFactory();
Session hibSession = hibSessionFactory.openSession();
Transaction hibTransaction = hibSession.beginTransaction();
int record ID = hibSession.save(record);
hibTransaction.commit();
hibSession.flush();
hibSession.close();
logger.info("Persisted new record : " + createdRecord);
createdRecord = getRecordById(recordID);
logger.info("Created record : " + createdRecord);
return createdRecord;
}
我在调用获取所有记录后插入新内容后在同一页面上使用页面重定向。但是我在重定向后面临的问题是它没有显示除最新记录之外的所有记录。但是当我刷新页面时,它会显示所有记录,包括最新记录。
下面是 Controller 代码:-
@RequestMapping(value = "records/addRecord", method = RequestMethod.POST)
@ResponseBody
public void addRecord(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
String recordId = request.getParameter("record_id");
String recordName = request.getParameter("record_name");
String recordAddress = request.getParameter("record_address");
String recordCity = request.getParameter("record_city");
String recordState = request.getParameter("record_state");
int recordZip = Integer.parseInt(request.getParameter("record_zip"));
Record newRecord = new Record();
newRecord.setRecordID(Integer.parseInt(recordId));
newRecord.setRecordName(recordName);
newRecord.setRecordAddress(recordAddress);
newRecord.setRecordCity(recordCity);
newRecord.setRecordState(recordState);
newRecord.setRecordZIP(recordZip);
logger.info("Received request to add record : " + newRecord);
Record addedRecord = recordService.addRecord(newRecord);
logger.info("Request for adding record completed, added record - " + addedrecord);
response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
response.sendRedirect("/RecordApp/records.jsp");
}
注意:hibernate 配置文件中没有使用缓存。
最佳答案
在你应用save
方法之前记录是一个 transient 对象,一旦你应用
hibSession.save(record);
它将它保存在数据库中,但是这个保存方法
返回该记录的Serializable
标识符,你可以做的是使用标识符并从数据库中获取它,这样做 createdRecord = record;
基本上是将相同的对象传递给返回值
Integer id = hibSession.save(record);
Record createdRecord = hibSession.get(Record.class,id);
return createdRecord
关于java - hibernate 不返回新插入的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36512441/