我正在尝试使用hibernate更新数据库..我使用了以下代码,当我尝试在输入第一组值后输入一些值时覆盖数据库。 如何在不删除先前值的情况下插入一组值?
这是我使用的代码。
String firstName = txtfnm.getText();
String lastName = txtlnm.getText();
String empId = txtuid.getText();
//Configuration config = new Configuration();
Configuration config = new Configuration();
config.addAnnotatedClass(Employee.class);
config.configure("hibernate.cfg.xml");
//to create a new table
new SchemaExport(config).create(true, true);
ServiceRegistry servicereg = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//create a session factory
SessionFactory factory = config.buildSessionFactory(servicereg);
Session session = factory.getCurrentSession();
//SessionFactory session = factory.getCurrentSession();
session.beginTransaction();
Employee emp1 = new Employee();
emp1.setFname(firstName);
emp1.setLname(lastName);
emp1.setUsrid(Integer.valueOf(empId));
session.update(emp1);
session.getTransaction().commit();
这是实体类
@Entity
@Table(name="empdtls")
public class Employee {
@Column(name="emp_id")
private int usrid;
@Column(name="emp_fnm")
private String fname;
@Column(name="emp_lnm")
private String lname;
@Id
public int getUsrid() {
return usrid;
}
public void setUsrid(int usrid) {
this.usrid = usrid;
}
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;
}
}
答案 0 :(得分:0)
hibernate将id视为主键,所以在你的情况下
@Id
@Column(name="emp_id")
private int usrid;
如果您尝试保存其userId(相同值,例如4)已存在于数据库中的员工对象,则userId是主键,它将更新值
如果您想保存新的新数据还有一件事,为什么要使用update()
方法。使用save()
或Persist()
或者如果您不知道具有相同userId的对象已存在于数据库中,请转到saveOrUpdate()
答案 1 :(得分:0)
同意Mitul,但我想你也应该关闭会议。
答案 2 :(得分:0)
为了更新实体,我们必须从数据库加载实体并使用session ...
进行更新在你的情况下你创建新的实体,它正在更新所有的字段......
请将session.beginTransaction()之后的代码更改为fallow ....
以下代码将从数据库获取实体,具有empid“4”...其主键
员工emp1 =(员工)session.get(Employee.class,4);
emp1.setFname(firstName);
emp1.setLname(lastName);
emp1.setUsrid(Integer.valueOf(empId));
session.update(emp1)
答案 3 :(得分:0)
您需要在hibernate配置文件中将 hibernate.hbm2ddl.auto 属性设置为 update 。