【问题标题】:Hibernate allocationsize default value is not 50Hibernate allocationsize 默认值不是 50
【发布时间】:2016-12-21 17:44:27
【问题描述】:

我在我的应用程序中使用 Hibernate @SequenceGenerator。在尝试使用应用程序在 DB 中插入新实体时,新持久化实体的 ID 与序列当前值相同,而不是序列当前值乘以 50。因为分配大小的默认值是 50。你有没有知道为什么会这样。提前致谢。

@javax.persistence.SequenceGenerator(name="SEQ_NAME", sequenceName="SEQ_NAME"")
@Table(name="TABLE_NAME")
public class entity{
    @Column(name="ID")
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_NAME"")
    int id;

【问题讨论】:

  • 在数据库中定义了一个 SEQUENCE ...它在那里设置了什么?谁创建了序列?
  • 是的,该序列存在于数据库中,我可以使用这条 SQL 行“SELECT seq_name.nextval FROM DAUL;”检查它的值。问题是持久化的实体 id 值与当前序列值相同。
  • 不回答问题...
  • 数据库管理员创建了序列,而不是我。如果我正确理解了您的问题。

标签: hibernate jpa oracle11g


【解决方案1】:

您的序列似乎是由 DBA 创建的,而不是由您的 JPA 提供者创建的。因此,将allocationSize 指定为JPA 绝对是零点(因为它仅用于模式/序列创建)。如果您想要特定的allocationSize,则需要在创建SEQUENCE 时告诉您的DBA 进行设置(通常通过INCREMENT BY 之类的方式)。

【讨论】:

  • 经过一番调查和搜索,我发现在应用程序运行时控制台中出现了这种冲突。 openjpa.Runtime:警告:无法缓存序列“SEQ_NAME”的序列值。您的应用程序无权运行 ALTER SEQUENCE 命令。确保它具有运行 ALTER SEQUENCE 命令的适当权限。这意味着 JPA 将禁用序列缓存,以防执行此命令的用户没有执行 Alter 命令的权限。
  • 我也通过启用此属性找到了解决此问题的方法。 ,但持久化的实体ID值仍与DB序列当前值相同。
  • 正如我所说,您的 DBA 将 SEQUENCE 设置为一个值,而不是您想要的值。 JPA 提供者试图将其更改为您的设置,但您没有授予它权限。所以解决方案是与您的 DBA 交谈!!
  • 请告诉大家,当您说您使用的是 HIBERNATE 时,为什么 OPENJPA 属性会产生任何影响?!!!!
  • 在我使用 Hibernate 时,OpenJPA 属性不应该有任何影响。似乎增加数据库序列以匹配 allocationSize 将解决此问题。有道理,所以我会接受这个答案。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2011-12-24
  • 2015-07-23
  • 2013-07-19
  • 2015-01-15
  • 2014-02-10
  • 2021-03-29
相关资源
最近更新 更多