hibernate annotation 怎么设置主键自动增长?mysql数据库

时间:2021-05-02 04:00:25
如题,主键类型为 varchar,应选用那种主键策略呢?


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



@Id 
@GeneratedValue(strategy=GenerationType.AUTO)



@Id 
@GeneratedValue(strategy=GenerationType.identity)


以上都试过,不行

30 个解决方案

#1


pirvate Long id;

@Id 
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId(){
return this.id;
}

#2


引用 1 楼 java_cxrs 的回复:
pirvate Long id;

@Id 
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId(){
return this.id;
}


你的方式我试过不行 
我的主键是varchar 类型的 那应该用什么方式呢

#3


 r       p

#4


不清楚  varchar 能用uuid 么

#5


varchar怎么自增?

#6


需要在主键上增加一个@Id标识

view plaincopy to clipboardprint?
@Id   
    @GeneratedValue(strategy = GenerationType.IDENTITY)   
    public int getId() {   
        return id;   
    }   
GenerationType 类型的枚举值,它的内容将指定 OpenJPA 容器自动生成实体标识的方式。有 GeneratorType.AUTO,GenerationType.IDENTITY,GenerationType.SEQUENCE, GenerationType.TABLE 四种方式 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
一般可以根据你采取的底层数据库来选择,比如是用oracle,id用sequence的话,可以采取sequence方式,如果是用mysql,一般就用auto模式 
         // 默认相当于native ID生成策略,JPA 1.0 中只有4个可选值 
         // 如果只写@Id ,主键字段不会自动产生,需要我们手动输入 
         // @GeneratedValue 默认为策略产生ID 
         // 如果我要让ID为IDENTITY 则需要手动给他指定值--@GeneratedValue(strategy=GenerationType.IDENTITY) 
这样选择了主键生成策略,在给实体赋值时就不用设置ID值了。 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shendaiming/archive/2010/03/09/5359536.aspx

#7


varchar的用uuid.hex自增的

#8


引用 7 楼 ibm_hoojo 的回复:
varchar的用uuid.hex自增的

不好意思,搞错了。
identity、native可以自增,针对的是Integer型的
varchar可以考虑uuid

#9


以前有hbm.xml的时候用的 uuid.hex


<hibernate-mapping>
<class name="com.mingoe.hibernate.admin.Authorization" table="authorization">
 <id name="authorizeId" type="string" column="AuthorizeId">
            <generator class="uuid.hex" />
        </id>
 <property name="functionId" type="string">
<column name="FunctionId" not-null="true"/>
</property>
    <property name="managerId" type="string">
<column name="ManagerId" not-null="true"/>
</property>
</class>
</hibernate-mapping>


现在用注解,应该用什么方式呢

#10



        @Id 
@GeneratedValue(generator = "persistenceGenerator")    
@GenericGenerator(name = "persistenceGenerator", strategy = "uuid.hex")
private String userId;


@Id 
@GeneratedValue(generator = "persistenceGenerator")    
@GenericGenerator(name = "persistenceGenerator", strategy = "uuid")
private String userId;


都不行

#11


神啊 有人用过没?

#12


注解没用过。。。

#13


@Id
@GeneratedValue(generator = "system-uuid")[该属性名自定义]
@GenericGenerator(name = " system-uuid ", strategy = "uuid")
[name可自定义,但是strategy属性必须是Hibernate中有效的主键策略]
@Column (name = "user_id")

#14


hibernate annotation 怎么设置主键自动增长?mysql数据库
JavaCode:

   1. @GeneratedValue(generator = "system-uuid")  
   2. @GenericGenerator(name = "system-uuid", strategy = "uuid")  

XML:

   1. <id name="yourId" type="java.lang.String">  
   2.     <column name="YOUR_ID" length="50" />  
   3.     <generator class="uuid.hex" />  
   4. </id>  

#15


UUID

#16


UUID

#17


引用 13 楼 youjianbo_han_87 的回复:
@Id
@GeneratedValue(generator = "system-uuid")[该属性名自定义]
@GenericGenerator(name = " system-uuid ", strategy = "uuid")
[name可自定义,但是strategy属性必须是Hibernate中有效的主键策略]
@Column (name = "user_id")



        @Id 
@GeneratedValue(generator = "persistenceGenerator")    
@GenericGenerator(name = "persistenceGenerator", strategy = "uuid")
@Column (name = "resourceId")  
private String resourceId;

我这么试了 还是不行 主键不能自动生成 保存是主键为空 报空指针错误

#18


还有人吗?

#19


谁还了解一些啊

#20


报空指针可能是配置错误,你在好好检查下,用uuid没错。

#21


引用 20 楼 mayanyun1986 的回复:
报空指针可能是配置错误,你在好好检查下,用uuid没错。

配置无误 保存对象时 别的字段都有值 就主键是空的

#22


@Id
    @SequenceGenerator(name = "SEQ_AM_LOGISTICS_BILL", sequenceName = "SEQ_AM_LOGISTICS_BILL", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AM_LOGISTICS_BILL")
    @Column(name = "LOGISTICS_BILL_ID")

#23


varchar怎么自增?

只能用自己定义的TableCustomerizeID了,需要实现一个Hibernate中的接口类

#24


引用 23 楼 qingyuan18 的回复:
varchar怎么自增?

只能用自己定义的TableCustomerizeID了,需要实现一个Hibernate中的接口类


我写错了 不是主键自增 是主键自动生成

#25


@GenericGenerator(name = "generator", strategy = "uuid.hex")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "id", unique = true, nullable = false, length = 32)
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

#26


@GenericGenerator(name = "generator", strategy = "uuid.hex")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "resourceId", unique = true, nullable = false, length = 32)
这个东西要写在 get set 前面,我试了不对
 
我按下面的方式写也不对

   @GenericGenerator(name = "generator", strategy = "uuid.hex")
   @Id
   private String resourceId;

    @GeneratedValue(generator = "generator")
    @Column(name = "resourceId", unique = true, nullable = false, length = 32)
    public String getResourceId() {
        return this.resourceId;
    }
    
    public void setResourceId(String resourceId) {
        this.resourceId = resourceId;
    }


还有高人不?

#27


问题已解决
由于我的实体类把主键单拿出来了,有个主键类
我把主键成策略写在实体类中了,所以不行

#28


uuid的主键可以自增长
写好id的annotation之后
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
还要在hibernate.cfg.xml中配置 "hbm2ddl.auto"指定为update
调试,搞定 
ps:帖子虽然是去年的了,回复是为了后来人,咳咳...

#29


确实很高兴,今天可以看到28楼的回答

#30


刚学spring mvc 学习了

#1


pirvate Long id;

@Id 
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId(){
return this.id;
}

#2


引用 1 楼 java_cxrs 的回复:
pirvate Long id;

@Id 
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId(){
return this.id;
}


你的方式我试过不行 
我的主键是varchar 类型的 那应该用什么方式呢

#3


 r       p

#4


不清楚  varchar 能用uuid 么

#5


varchar怎么自增?

#6


需要在主键上增加一个@Id标识

view plaincopy to clipboardprint?
@Id   
    @GeneratedValue(strategy = GenerationType.IDENTITY)   
    public int getId() {   
        return id;   
    }   
GenerationType 类型的枚举值,它的内容将指定 OpenJPA 容器自动生成实体标识的方式。有 GeneratorType.AUTO,GenerationType.IDENTITY,GenerationType.SEQUENCE, GenerationType.TABLE 四种方式 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
一般可以根据你采取的底层数据库来选择,比如是用oracle,id用sequence的话,可以采取sequence方式,如果是用mysql,一般就用auto模式 
         // 默认相当于native ID生成策略,JPA 1.0 中只有4个可选值 
         // 如果只写@Id ,主键字段不会自动产生,需要我们手动输入 
         // @GeneratedValue 默认为策略产生ID 
         // 如果我要让ID为IDENTITY 则需要手动给他指定值--@GeneratedValue(strategy=GenerationType.IDENTITY) 
这样选择了主键生成策略,在给实体赋值时就不用设置ID值了。 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shendaiming/archive/2010/03/09/5359536.aspx

#7


varchar的用uuid.hex自增的

#8


引用 7 楼 ibm_hoojo 的回复:
varchar的用uuid.hex自增的

不好意思,搞错了。
identity、native可以自增,针对的是Integer型的
varchar可以考虑uuid

#9


以前有hbm.xml的时候用的 uuid.hex


<hibernate-mapping>
<class name="com.mingoe.hibernate.admin.Authorization" table="authorization">
 <id name="authorizeId" type="string" column="AuthorizeId">
            <generator class="uuid.hex" />
        </id>
 <property name="functionId" type="string">
<column name="FunctionId" not-null="true"/>
</property>
    <property name="managerId" type="string">
<column name="ManagerId" not-null="true"/>
</property>
</class>
</hibernate-mapping>


现在用注解,应该用什么方式呢

#10



        @Id 
@GeneratedValue(generator = "persistenceGenerator")    
@GenericGenerator(name = "persistenceGenerator", strategy = "uuid.hex")
private String userId;


@Id 
@GeneratedValue(generator = "persistenceGenerator")    
@GenericGenerator(name = "persistenceGenerator", strategy = "uuid")
private String userId;


都不行

#11


神啊 有人用过没?

#12


注解没用过。。。

#13


@Id
@GeneratedValue(generator = "system-uuid")[该属性名自定义]
@GenericGenerator(name = " system-uuid ", strategy = "uuid")
[name可自定义,但是strategy属性必须是Hibernate中有效的主键策略]
@Column (name = "user_id")

#14


hibernate annotation 怎么设置主键自动增长?mysql数据库
JavaCode:

   1. @GeneratedValue(generator = "system-uuid")  
   2. @GenericGenerator(name = "system-uuid", strategy = "uuid")  

XML:

   1. <id name="yourId" type="java.lang.String">  
   2.     <column name="YOUR_ID" length="50" />  
   3.     <generator class="uuid.hex" />  
   4. </id>  

#15


UUID

#16


UUID

#17


引用 13 楼 youjianbo_han_87 的回复:
@Id
@GeneratedValue(generator = "system-uuid")[该属性名自定义]
@GenericGenerator(name = " system-uuid ", strategy = "uuid")
[name可自定义,但是strategy属性必须是Hibernate中有效的主键策略]
@Column (name = "user_id")



        @Id 
@GeneratedValue(generator = "persistenceGenerator")    
@GenericGenerator(name = "persistenceGenerator", strategy = "uuid")
@Column (name = "resourceId")  
private String resourceId;

我这么试了 还是不行 主键不能自动生成 保存是主键为空 报空指针错误

#18


还有人吗?

#19


谁还了解一些啊

#20


报空指针可能是配置错误,你在好好检查下,用uuid没错。

#21


引用 20 楼 mayanyun1986 的回复:
报空指针可能是配置错误,你在好好检查下,用uuid没错。

配置无误 保存对象时 别的字段都有值 就主键是空的

#22


@Id
    @SequenceGenerator(name = "SEQ_AM_LOGISTICS_BILL", sequenceName = "SEQ_AM_LOGISTICS_BILL", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AM_LOGISTICS_BILL")
    @Column(name = "LOGISTICS_BILL_ID")

#23


varchar怎么自增?

只能用自己定义的TableCustomerizeID了,需要实现一个Hibernate中的接口类

#24


引用 23 楼 qingyuan18 的回复:
varchar怎么自增?

只能用自己定义的TableCustomerizeID了,需要实现一个Hibernate中的接口类


我写错了 不是主键自增 是主键自动生成

#25


@GenericGenerator(name = "generator", strategy = "uuid.hex")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "id", unique = true, nullable = false, length = 32)
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

#26


@GenericGenerator(name = "generator", strategy = "uuid.hex")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "resourceId", unique = true, nullable = false, length = 32)
这个东西要写在 get set 前面,我试了不对
 
我按下面的方式写也不对

   @GenericGenerator(name = "generator", strategy = "uuid.hex")
   @Id
   private String resourceId;

    @GeneratedValue(generator = "generator")
    @Column(name = "resourceId", unique = true, nullable = false, length = 32)
    public String getResourceId() {
        return this.resourceId;
    }
    
    public void setResourceId(String resourceId) {
        this.resourceId = resourceId;
    }


还有高人不?

#27


问题已解决
由于我的实体类把主键单拿出来了,有个主键类
我把主键成策略写在实体类中了,所以不行

#28


uuid的主键可以自增长
写好id的annotation之后
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
还要在hibernate.cfg.xml中配置 "hbm2ddl.auto"指定为update
调试,搞定 
ps:帖子虽然是去年的了,回复是为了后来人,咳咳...

#29


确实很高兴,今天可以看到28楼的回答

#30


刚学spring mvc 学习了