如果该策略取代,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!
答案 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