首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在数据库表已经填充JPA时正确设置@Id字段

如何在数据库表已经填充JPA时正确设置@Id字段
EN

Stack Overflow用户
提问于 2011-11-14 21:19:47
回答 2查看 2.7K关注 0票数 3

我的数据库中只有一个表,并且我在字段上添加了@Id属性。作为strategy,我使用GenerationType.IDENTITY。当数据库表还没有由SQL脚本中的行填充时,这种方法效果很好。

当表中已经有一些行时,我如何才能让它工作呢?因为当我试图从预先填充的应用程序中插入实体时,它不起作用。

为此,我使用Derby数据库,并使用eclipselink作为实现。

EN

回答 2

Stack Overflow用户

发布于 2011-11-14 21:30:16

使用从顺序表中获取ids的序列生成器。如下所示:

代码语言:javascript
复制
@Id
@GeneratedValue(generator = "yourTableIdGenerator")
@GenericGenerator(name = "yourTableIdGenerator", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = {
                    @Parameter(name = "sequence_name", value = "your_table_id_seq"),
                    @Parameter(name = "optimizer", value = "hilo"),
                    @Parameter(name = "initial_value", value = "1000"),
                    @Parameter(name = "increment_size", value = "10") }
                )
@Column(name = "your_table_id", length = 15)
public Long getId() {
    return id;
}

将initial_value设置为大于从脚本填充的行的最大id的值。

来自java6ee api:http://download.oracle.com/javaee/6/api/javax/persistence/TableGenerator.html

代码语言:javascript
复制
@TableGenerator(
   name="empGen",
   table="ID_GEN",
   pkColumnName="GEN_KEY",
   valueColumnName="GEN_VALUE",
   pkColumnValue="EMP_ID",
   initialValue = 1000,
   allocationSize=1)
@Id
@GeneratedValue(strategy=TABLE, generator="empGen")
int id;
票数 3
EN

Stack Overflow用户

发布于 2011-11-15 04:30:21

我假设您的错误是因为您为您的表创建的标识(通过示例)从"1“中开始,并且您已经用id为"1”的行填充了表。所以肯定存在PK约束冲突。如果这就是我可以建议的场景:

  1. 检查用于预填充数据的行数。通过示例3500。
  2. 以较高的数字创建标识列,以避免违反PK约束。通过示例,下表在4000中启动标识:

这在Derby DB中应该可以工作

代码语言:javascript
复制
CREATE TABLE MAPS    (
    MAP_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 4000, INCREMENT BY 1),
    MAP_NAME VARCHAR(24) NOT NULL,
    REGION VARCHAR(26),
    AREA DECIMAL(8,4) NOT NULL,
    PHOTO_FORMAT VARCHAR(26) NOT NULL,
    PICTURE BLOB(102400),
    UNIQUE (MAP_ID, MAP_NAME)
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8122194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档