我是Hibernate的新手.当我保存特定的实体然后它重写现有的数据.
我使用ID作为自动生成如下:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private int id;
Run Code Online (Sandbox Code Playgroud)
在这里我保存实体如下:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
}
如果我将在下次更改实体值,那么它应该生成下一个id而不是从第一个id开始.
任何时候结果都一样
mysql> select * from stud;
+----+--------+------+
| id | city | name |
+----+--------+------+
| 1 | Mumbai | Test |
+----+--------+------+
Run Code Online (Sandbox Code Playgroud)
1排(0.00秒)
我想要的是如下结果:
mysql> select * from stud;
+----+--------+------+
| id | city | name |
+----+--------+------+
| 1 | Mumbai | Test |
| 2 | Mumbai | Test |
+----+--------+------+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
请帮我一样..
Sku*_*rpi 16
我意识到这是在一年前被问到的,但我和你有完全相同的问题,我想我会发布它,以防其他任何人拥有它.
事实证明这是我的会话工厂中的一个设置:
查找设置hibernate.hbm2ddl.auto,很可能你已将它设置为创建.创建会话工厂时,此设置会执行此操作.是什么创造所做的是,它降低现有的架构(至少它会使用表),并创建一个新的,使得它看上去就像是在你的表格覆盖行.
您可以从此处选择一些不同的值.对于开发,我相信你希望它设置更新,因为如果它们不存在(就像创建一样)它将为你创建新表,但如果表已经存在,它将更新模式.
对于生产,您应该坚持验证,因为它不会改变您的架构,只需验证它:)
有关不同值的更多详细信息,请查看此优秀答案
| 归档时间: |
|
| 查看次数: |
11845 次 |
| 最近记录: |