【问题标题】:How to use save methoda with Hibernate annotations without incremented value?如何在没有增量值的情况下使用带有 Hibernate 注释的保存方法?
【发布时间】:2013-10-24 06:15:18
【问题描述】:

我尝试使用 save() 方法,但是数据库模式没有增加 Id 的值,所以它给出了异常: 这个类的 ids 必须在调用 save() 之前手动分配

所以我想这样做,我该怎么做?

【问题讨论】:

  • 问题含糊不清。不清楚问题是关于 Hibernate 模式生成、持久化实体还是将 Hibernate 与不支持自动递增 PK 列的数据库一起使用。

标签: hibernate


【解决方案1】:

您可以使用@GeneratedValue 注释并指定 GenerationType IDENTITY。

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getId() { ... } 

阅读更多http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

【讨论】:

  • 是的,因为当您使用 IDENTITY 时,您必须手动设置 id 字段的值。
  • 我想要的是:没有注释我们使用 Save() 方法,它返回 Id 对吗?我想使用注释的方式相同..我的列不应该是 auto_increment
  • 正如你所说,你的列不应该是 auto_increment 但你想使用 save 方法,所以根据docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/…,这个方法返回具有自动生成标识符的对象,或者在 IDENTITY(或分配的)生成器的情况下将使用现有 ID。
  • 是的,我明白,但是,我正在使用 hbm.xml 创建此列 这里的列是由 Hibernate 本身创建的(没有 auto_increment),我正在使用 Save(),所以它返回我 id..一切都很好。但是,当我使用带有注释的相同模式时: !@Id !@GeneratedValue @Column(name = "msgId") @Type(type = "long") public Long msg;公共字符串 msgID;它给出了异常:id is null
  • 阅读此链接 - docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html。它解释了生成器的值。
【解决方案2】:

还有许多其他选项可用于生成密钥。

看这里:

How to choose the id generation strategy when using JPA and Hibernate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多