1

如果该策略占据一席之地,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);
...

斯帕西博!

4

3 回答 3

1

只需删除 GeneratedValue 的注释,如下所示,实体将使用分配的 id 值。它适用于我的网络应用程序。

@GeneratedValue(strategy = GenerationType.AUTO)
于 2013-03-05T01:24:31.087 回答
1

如有必要,您可以使用以下策略存储具有分配 id 的实体:

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

唯一的缺点是您必须包含一个版本字段,Hibernate 需要识别它是新实体还是现有实体:

@Version
public Long getVersion() {
    ...
}
于 2013-03-04T19:12:29.450 回答
0

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

分配

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

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

于 2015-03-26T08:48:39.657 回答