如何使用hibernate将数据插入数据库而不删除以前的数据?

时间:2015-03-23 06:23:55

标签: java hibernate

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





}

4 个答案:

答案 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

相关问题