2012-04-11 68 views
5

您好我写了这样的如何生成具有自动休眠ID与初值

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

但是我手动从DAO像“e.setUserID设置它(01)代码生成; “插入。其他行不插入是否有任何过程来获得id值,并检索自动生成的值。即时通讯思想我会得到一些帮助

回答

4

使用

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

它的工作,但它是分配到另一列产生的价值 – Vidya 2012-04-12 06:42:26

+0

如果任何人投票,应该有一个理由,应该分享,为什么投了票? – Shehzad 2015-07-24 10:21:50

+0

这不是一个安全的方法,因为生成器从数据库中选择最大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 – 2015-08-11 07:35:48

5

使用身份生成类型,而不是汽车。使用一个长的ID。我还建议更改名称从用户IDuserId。不要忘记类名的@Entity。

@Entity 
public class MyClass{ 

private Long userId; 

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

    //.. rest of class 

} 

要小心使用命名约定,并确保您的字段名称和类型与数据库中的字段名称和类型相匹配。

+0

当创建行时,它会自动创建ID值...或者我们应该调用setter方法 – Vidya 2012-04-12 04:50:55

+0

如果在数据库中,id应该显示为身份,您应该从不**手动设置id。首先确保你的数据库配置是自动增加ID的。然后按照我上面的建议映射id列。同样,在命名约定和数据类型时要小心。 – 2012-04-12 06:25:36