亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述使用Hibernate App在Java中更改PostgreSQL的MySql时出错相关的知识,希望能为你提供帮助。
我尝试将我的应用程序从mysql迁移到PostgreSQL。它只是一个非常小的应用程序,我正在努力。只有5或6个表。
所以我在postgresql中重新创建了相同的数据库,我了解到用户词是为postgress保留的,主键需要是串行类型。
经过一些小的调整后,Hibernate正在工作,我可以直接从db重新创建模型。
我遇到的第一个问题是,当我尝试存储它时,它将0添加为PK。因此在java中,当从数据库中获取该对象(PK为0)并且我正在创建一个新对象时,“null”int为0(或者说,unassign int为0),它会给我错误:
A different object with the same identifier value was already associated with the session
这就是我存储实体的方式。
public Object addOrUpdate(Object item) throws Exception {
sessionFactory.getCurrentSession().saveOrUpdate(item);
return item;
}
在一些谷歌之后,我改变
saveOrUpdate
为merge
,但是虽然我没有得到那个错误,所有的值替换第一个(具有PK 0)。所以我在数据库中结束了最后一个对象是存储的对象。这是我的表:
文章图片
id(最后一列)创建为BigSerial。
这是Hibernate从我的postgresql创建的Java模型
@Id@Column(name = "id", unique = true, nullable = false)
public long getId() {
return this.id;
}public void setId(long id) {
this.id = id;
}
我正在使用Java1.8和PostgreSQL 10。
那么我如何继续使用postgresql但避免出现这些问题?
答案如果要在hibernate中支持自动增量,则需要添加其他注释。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
生成的值注释是自动递增值所必需的。有四种不同类型的发电策略。
1) generation type.auto
2)GenerationType.IDENTITY
3)GenerationType.SEQUENCE
4)GenerationType.TABLE
有关说明,请参阅以下链接
【使用Hibernate App在Java中更改PostgreSQL的MySql时出错】https://thoughts-on-java.org/jpa-generate-primary-keys/
推荐阅读
- Flask,Pymongo和Mongoengine - ImportError(无法导入名称'app')
- 错误(TypeError('app.use()需要中间件函数)
- 为你的企业雇用WordPress开发人员的建议
- Genesis智能标题–在滚动条上隐藏但在滚动条上显示
- 11个创建独特WordPress网站的最佳多用途主题
- 如何在Genesis Authority Pro标头中添加搜索图标()
- 如何允许贡献者在WordPress中上传图片()
- 如何更改WordPress管理员URL以防止暴力攻击()
- 从Genesis切换到Astra WordPress主题