【问题标题】:How to update records using hibernate如何使用休眠更新记录
【发布时间】:2014-05-15 06:23:11
【问题描述】:

您好,我正在尝试使用 jsp、servlat 和 hibernate 来简化一个 Web 应用程序,我尝试在其中插入更新和删除记录,当我要更新记录时遇到问题

我怎样才能做到这一点

这是我的代码 updaterecprd.jsp

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
             HttpSession httpSession = request.getSession();
  String uname=httpSession.getAttribute("username").toString();
        String fname=request.getParameter("fname");
String  lname=request.getParameter("lname");
String email=request.getParameter("email");
String pass=request.getParameter("pass");
String phone=request.getParameter("phone");
try
{
Configuration cfg=new Configuration();  
    cfg.configure("/com/login/hibernate.cfg.xml");//populates the data of the configuration file  

    //creating seession factory object  
    SessionFactory factory=cfg.buildSessionFactory();  
  Session sess = factory.openSession();
Transaction tr = sess.beginTransaction();
//cfg.configure("/com/login/hibernate.cfg.xml");
Contact c = (Contact)sess.get(Contact.class,fname);
c.setFname(fname);
c.setLname(lname);
c.setEmail(email);
c.setPass(pass);
c.setPhone(phone);
tr.commit();
sess.update(c);
sess.close();
out.println("<h1>Updated successfully!</h1>");
}
catch(Exception e)
{
System.out.println("e="+e.getMessage());
}
        %>
    </body>
</html>

Contact.java

public class Contact {
       int id;
       String fname;
       String lname;
       String email;
       String uname;
       String pass;
       String phone;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
        }

我尝试了很多,但我无法实现目标

我怎样才能达到我想要的输出

谢谢

【问题讨论】:

    标签: java hibernate jsp


    【解决方案1】:

    尝试交换 2 行

    tr.commit();
    sess.update(c);
    

    首先,您应该通过 update(c) 存储您的更改,然后再提交它们。

    【讨论】:

    • 任何错误?是否正确检索了 Contact 实例?从 DB 中检索到哪个 ID?
    • 没有显示从那里检索(uname)的错误
    【解决方案2】:

    问题似乎出在(Contact)sess.get(Contact.class,fname); Contact 实体未正确加载。 见http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html#get(java.lang.Class,java.io.Serializable)。

    get() 方法将实体标识符作为第二个参数,在你的情况下是 id 属性而不是 fname。 同样正如@StanislavL 所建议的那样,更改提交和保存的顺序。

    【讨论】:

    • 你可以使用像Query query = session.createQuery("from Contact where fname= :fname"); query.setParameter("fname", fname);这样的东西
    • 此代码代替 session.get 读取Contact。更新部分保持不变。
    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多