如何使用hibernate更新记录

时间:2014-05-15 06:23:11

标签: java hibernate jsp

您好我正在尝试使用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;
    }
        }

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

如何实现我想要的输出

由于

2 个答案:

答案 0 :(得分:1)

尝试交换2行

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

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

答案 1 :(得分:0)

问题似乎与(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提出的更改提交和保存的顺序。