Hibernate:在case中插入一个带有自定义id的实体:strategy = GenerationType.AUTO

时间:2013-03-04 16:23:53

标签: java hibernate generated

如果该策略取代,Hib只会忽略id设置。

有没有办法避免这种情况并保存策略?

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

...

Account account = new Account();
account.setId(1000L);
account.setSmth(smth);
...
//Tried to do so, but tomcat hangs on this string. 
session.createSQLQuery("ALTER TABLE account AUTO_INCREMENT = " + account.getId() + ";").executeUpdate();
session.save(account);
...

Spasibo!

3 个答案:

答案 0 :(得分:0)

如果需要,您可以使用此策略存储具有指定ID的实体:

@GeneratedValue(strategy="org.hibernate.id.Assigned")
public Long getId() {
    ...
}

唯一的缺点是你必须包含Hibernate需要识别的版本字段,如果它是新的或现有的实体:

@Version
public Long getVersion() {
    ...
}

答案 1 :(得分:0)

只需删除GeneratedValue的注释,如下所示,然后实体将使用asssigned id值。它适用于我的webapp。

@GeneratedValue(strategy = GenerationType.AUTO)

答案 2 :(得分:0)

删除注释@GeneratedValue。 Hibernate将使用您指定的标识符。请参阅以下来自Hibernate文档的描述。

<强>分配

允许应用程序在调用save()之前为对象分配标识符。如果未指定任何元素,则这是默认策略。

参考https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html