java - hibernate 不返回新插入的记录

标签 java mysql hibernate

我正在使用以下框架开发一个网络应用程序:

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/

相关文章:

hibernate - Grails GORM如何在指定键上联接旧表

使用基本实体的 hibernate 注释

java - 使用 OutputStream (android) 通过 SFTP 从远程服务器下载文件

java - 递归创建树时出现 OutOfMemoryError 错误?

php - paypal IPN 不向 mysql 添加数据?

java - 在 MySQL InnoDB 中获取以下查询的锁

java - 垃圾收集器如何快速知道哪些对象不再有对它们的引用?

java - 如何使我的代码能够创建多个实例

php - mysql_fetch 问题...我快疯了

java - 如何通过外部更新使你的 hibernate 一级缓存保持一致?