gpt4 book ai didi

持久/保存实体时,HIbernate覆盖数据

转载 作者:行者123 更新时间:2023-12-04 13:10:09 31 4
gpt4 key购买 nike

我是Hibernate的新手。当我保存特定实体时,它将从现有实体中重写数据。

我将ID用作自动生成,如下所示:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private int id;

在这里,我将实体保存如下:
class StudDAO() {

public static void main(String[] args){
StudDAO obj = new StudDAO();
Stud stud = new Stud();
stud.setName("Test");
stud.setCity("Mumbai");
obj.createStud(stud);
}

public void createStud(Stud stud) {
try {

Session session = HibernateSessionFactory.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
session.save(stud);
transaction.commit();

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
transaction.rollback();
}
}

}

如果我下次要更改实体值,则应生成下一个ID,而不是从第一个ID开始。

任何时候的结果都会像
mysql> select * from stud;

+----+--------+------+
| id | city | name |
+----+--------+------+
| 1 | Mumbai | Test |
+----+--------+------+

设置1行(0.00秒)

我想要的结果如下所示:
mysql> select * from stud;
+----+--------+------+
| id | city | name |
+----+--------+------+
| 1 | Mumbai | Test |
| 2 | Mumbai | Test |
+----+--------+------+
2 rows in set (0.00 sec)

请同样帮我。

最佳答案

我知道这个问题是一年前提出的,但是我遇到了与您完全相同的问题,所以我想将其发布,以防其他人收到。
原来这是我的 session 工厂中的设置:
查找设置 hibernate.hbm2ddl.auto ,很可能已将其设置为创建。创建 session 工厂时,此设置会执行操作。 create的作用是删除现有模式(至少要使用的表)并创建一个新的模式,使其看起来像是覆盖了表中的行。
您可以从此处选择一些不同的值。对于开发,我相信您希望将其设置为更新,因为它会为您创建新表(如果它们不存在)(就像create一样),但是如果表已经存在,它将更新架构。
对于生产,您应该坚持来验证,因为它不会改变您的架构,只需对其进行验证即可:)
有关不同值的更多详细信息,请检查this excellent answer

关于持久/保存实体时,HIbernate覆盖数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4033433/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com