【问题标题】:Postgresql/openJPA (geronimo) Sequence IssuePostgresql/openJPA (geronimo) 序列问题
【发布时间】:2011-05-16 01:02:07
【问题描述】:

我对序列有一个奇怪的问题。我将 postgresql 9 与 geronimo 2.2 一起使用。我在 db 环境中创建了序列PLANTS_ID_SEQ,当我尝试创建一个新实体时,我的日志中出现错误(来自 postegresql),关系PLANTS_ID_SEQ 存在。它似乎试图创建已经创建的序列。这是来自实体 bean 的代码:

@Id 
@GeneratedValue(generator="PLANTS_SEQ",strategy=GenerationType.SEQUENCE) @SequenceGenerator(name="PLANTS_SEQ", sequenceName="PLANTS_ID_SEQ",allocationSize=1) @Column(name = "ID") 
private Integer id; 

请注意,如果我更改序列名称 (eg sequenceName="MY_SEQ"),那么代码会正确运行,但它会在 postgresql 中创建(并且显然使用)MY_SEQ 序列。如果有人对此案有线索,请分享。 谢谢乔治

【问题讨论】:

  • 我认为您应该将此报告为错误...

标签: postgresql sequence openjpa geronimo


【解决方案1】:

如果您的表有一个 SERIAL 类型的列,那么 postgres 将为您创建序列并在插入时自动使用它。

它创建的序列被命名为“tablename_id_seq”...

您可能正在尝试复制 postgres 已经完成的操作,并创建一个重复的序列。

【讨论】:

  • 问题是每次服务器重启时jpa都会尝试创建序列。可能,它忽略了序列的存在。因此,问题仍然存在。
【解决方案2】:

已解决: 应该在 persistence.xml 中添加以下属性:

property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(Sequences=false)" 

这样,openjpa 的 MappingTool 就不会再尝试创建序列了。

【讨论】:

  • 我想你也错过了向我们展示应该在 persistence.xml 中添加的属性
  • 你是对的,它在标签属性内并被编辑器清除。我删除了标签并更新了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多