使用Hibernate App在Java中更改PostgreSQL的MySql时出错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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
有关说明,请参阅以下链接
https://thoughts-on-java.org/jpa-generate-primary-keys/
以上是关于使用Hibernate App在Java中更改PostgreSQL的MySql时出错的主要内容,如果未能解决你的问题,请参考以下文章