您好我正在尝试使用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;
}
}
我尝试了很多,但我无法实现目标
如何实现我想要的输出
由于
答案 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提出的更改提交和保存的顺序。