Hibernate中提交后的数据库自动更新

时间:2013-07-02 14:46:03

标签: hibernate struts2

我有一个网站,可以使用Struts2和Hibernate,MySQL,使用Tomcat 6服务器从公司员工那里获得调查。这是获取事件问题的方法,事件的问题是使用UTF-8编码。这是我的代码:

public String getEventQuestion() {
          try {
                 event = surveyEventController.getEvent(this.getId());
                 surveyQuestions = surveyQuestionController.getQuestion(this.getId());
                 if (surveyQuestions != null) {
                       return Constants.SUCCESS;
                 } else {
                       return Constants.FAIL;
                 }
          } catch (Exception e) {
                 logger.error("[Exception]getSurvey: " + e.getMessage(), e);
                 return Constants.FAIL;
          }
   }
来自控制器的

getQuestion方法:

@SuppressWarnings("unchecked")
   public List<SurveyQuestion> getQuestion(Long eventID)
   {
          Session session = HibernateUtil.getSessionFactory().getCurrentSession();
          List<SurveyQuestion> listQuestion = null;
          try
          {
                 session.getTransaction().begin(); 

                 listQuestion = (List<SurveyQuestion>)session.createQuery("from SurveyQuestion where event_id="+eventID.toString()).list();
          session.getTransaction().commit();
          }
          catch(Exception e)
          {
                 logger.error("[Exception] getQuestion SurveyQuestion: ",e);
          session.getTransaction().rollback();
          }
          if(listQuestion!=null && !listQuestion.isEmpty())
          {
                 return listQuestion;
          }
          else
          {
                 return null;
          }
   }

所有jsp页面编码也是UTF-8。

我第一次访问网站时,内容已按预期成功加载了UTF-8内容。

问题是我按F5刷新页面后,内容自动更改为非UTF-8编码。我调试并认识到当运行session.getTransaction()。commit()时,数据库会自动使用非UTF-8编码内容中的 listQuestion进行更新,也许是ISO或类似的东西,所有特殊字符都改为?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我假设我可以通过

定义字符编码
<property name="connection.url">
        jdbc:mysql://localhost:3306/survey?useUnicode=true&amp;amp;characterEncoding=UTF-8;
    </property>

但是当上面的内容不起作用时,我找到了另一个解决方案,在hibernate.cfg.xml中,你必须通过

定义hibernate字符编码
<property name="hibernate.connection.characterEncoding">UTF-8</property>

它运作正常。感谢您对Roman C的支持。