【问题标题】:Duplicate keys with hibernate使用休眠复制键
【发布时间】:2017-11-06 17:00:46
【问题描述】:

我在模式 myschema 下有一个名为 mytable 的 Postgres 9.5.5 表。它没有主键 - 我们在创建表时错过了添加它。这导致表的 id 列中具有重复值的行。该表的唯一访问点是通过 Hibernate 4.3.10 Final 实体类的 save()、update() 和 delete() 方法。据我所知,没有人手动更新数据库。代码的哪一部分将重复的 id 列值发送到表?实体类长这样 -

@Entity

@Table(name = "mytable", schema = "myschema")

public class MyTable implements Serializable {


/** Id. */

@Id

@GeneratedValue(generator = "myschema.mytable_seq", strategy = GenerationType.AUTO)
@SequenceGenerator(name = "myschema.mytable_seq", sequenceName = "myschema.mytable_seq")
@Column(name = "id", unique = true, nullable = false)
private int id;

下面是postgres中的序列定义-

CREATE SEQUENCE myschema.mytable_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 765
  CACHE 1;

hibernate 代码是这样的(sessionFactory 是 org.hibernate.SessionFactory 的自动装配实例 -

@Repository
    public class HBMyTableDao extends HBAbstractDAO<MyTable> implements MyTableDao {
        public void save(MyTable model) {
            sessionFactory.getCurrentSession().save(model);
        }

        public void saveOrUpdate(MyTable model) {
            sessionFactory.getCurrentSession().saveOrUpdate(model);
        }

        public void update(MyTable model) {
            sessionFactory.getCurrentSession().update(model);
        }

        public void delete(MyTable model) {
            sessionFactory.getCurrentSession().delete(model);
        }
    }

【问题讨论】:

  • 您能否发布用于更新/保存实体的代码的 sn-p?
  • 在原帖中添加...谢谢

标签: postgresql hibernate primary-key


【解决方案1】:

Hibernate 需要主键。

https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#mapping-declaration-id

也许你可以在表格中添加一个自动生成的列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多