如何使用自动生成的起始值生成Hibernate ID

6

你好,我写了如下代码:

@Id
@Column(nullable=false)
@GeneratedValue(strategy=GenerationType.AUTO)
public int getUserID() {
    return UserID; 
}

但是我手动从DAO设置它,例如 "e.setUserID(01);" 来进行插入。否则行不会插入。有没有什么方法可以获取id的值并检索自动生成的值。我认为我会得到一些帮助。

2个回答

5

使用IDENTITY生成类型代替auto。使用Long类型作为ID。我也建议将名称从UserID改为userId。不要忘记在类名上加上@Entity。

@Entity
public class MyClass{

private Long userId;

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column
    public Long getUserID(){
        return userId;
    }

    //.. rest of class

}

非常注意命名规则,确保您的字段名称和类型与数据库中的字段名称和类型匹配。

当行创建时,它将自动创建ID值...或者我们应该在方法中调用setter函数。 - Vidya
如果在数据库中id作为标识出现,就永远不要手动设置id。首先确保数据库配置是自动递增id。然后按照上述建议映射id列。同样,请注意命名约定和数据类型。 - Raul Rene

4

使用

@GenericGenerator(name="generator", strategy="increment")
@GeneratedValue(generator="generator")

它可以工作,但是它将生成的值分配给了另一列。 - Vidya
如果有人进行了负面评分,应该提供一个原因。为什么要进行负面评分呢? - Shehzad
这不是一种安全的方法,因为生成器从数据库中选择最大的id并递增它。虽然它对于测试目的很有用。文档明确警告“不要在集群中使用!”。请查看:https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/id/IncrementGenerator.html https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html#mapping-declaration-id - Bahattin Ungormus
@ Bahattin Ungormus,你真的读了问题陈述吗? - Shehzad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接