【问题标题】:How to prevent Hibernate from using 0 as ID?如何防止 Hibernate 使用 0 作为 ID?
【发布时间】:2011-12-30 22:02:40
【问题描述】:

我正在使用

@TableGenerator(name="tab",initialValue=2,allocationSize=50)

在实体上并用

定义ID
@Id
@GeneratedValue(generator="tab",strategy=GenerationType.TABLE)
private int id;

然而 Hibernate 仍然使用 0 作为 ID。

我不能使用 @GenericGenerator,因为 Jboss AS7 附带的 Hibernate4 不附带注释。

有简单的解决方案还是我必须编写自定义生成器?

【问题讨论】:

  • 您没有任何部署描述符代码覆盖您的注释吗?您是在使用架构初始化还是在现有数据库上工作?
  • 没有特定于数据库的部署描述符。我现在正在使用 并通过 import.sql 使用一些示例数据。
  • 您确定在这些数据中没有任何插入到表生成器​​所在的表中?您是否尝试在空数据库上调用代码以让 Hibernate 在执行 import.sql 之前生成所有表?
  • 参见stackoverflow.com/questions/3433724/…(我也遇到了同样的问题——我想使用hibernate SERIAL主键,但hibernate一直在为id插入0——将其设置为链接描述的内容,现在我的插入与 postgres 一起使用)

标签: java hibernate jpa jboss generator


【解决方案1】:

Hibernate 正在创建 ID 为 0 的 ID,因为您有一个原始类型。尝试使用Integer id 而不是int id。记住原语不能保存空值。

如果要生成自定义id生成器,可以在DB中使用SEQUENCE来生成对象的id。

<id ....>
        <generator class="sequence">
           <param name="sequence">YOUR_SEQUENCE _NAME</param>
       </generator>
</id>

阅读有关生成器类的 API here

【讨论】:

  • 谢谢。如果它需要自定义生成器来告诉 Hibernate 不要使用 0 作为 ID 以及为什么它忽略生成器注释,那么问题或多或少。
猜你喜欢
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2011-11-22
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多