使用Hibernate App在Java中更改PostgreSQL的MySql时出错

问题描述 投票:0回答:1

我尝试将我的应用程序从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;
    }

在一些谷歌之后,我改变saveOrUpdatemerge,但是虽然我没有得到那个错误,所有的值替换第一个(具有PK 0)。所以我在数据库中结束了最后一个对象是存储的对象。

这是我的表:

enter image description here

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但避免出现这些问题?

java postgresql hibernate
1个回答
0
投票

如果要在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/

© www.soinside.com 2019 - 2024. All rights reserved.