使用hibernate复制密钥



我在模式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.hubinate.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);
}
}

休眠需要主键。

参见https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#mapping-申报id

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

最新更新