Как аннотировать идентификатор так, чтобы это были автоинкременты без таблицы SEQUENCE? - PullRequest
4 голосов
/ 28 марта 2012

У меня проблема с генерацией идентификаторов для новых объектов, я попытался:

@Id
@GeneratedValue
private Long myId;

и

@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
private Long myId;

а на entityManager.persist я получаю Table "SEQUENCE" not found В чистом спящем режиме generator class="increment" работал у меня просто отлично.

Ответы [ 3 ]

13 голосов
/ 28 марта 2012

Вы можете определить myId как столбец автоинкремента / идентификатора в базе данных и аннотировать соответствующий объект поля следующим образом:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long myId;

Это работает как минимум с H2 1.3.160 и Hibernate 3.6.8.

2 голосов
/ 28 марта 2012

Вы пробовали это ..

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
0 голосов
/ 24 мая 2016

Если вы хотите генерировать идентификаторы, которые являются общими (и уникальными) для нескольких постоянных объектов, используйте @TableGenerator. H2 и многие другие базы данных не имеют внутренней поддержки последовательностей, поэтому @SequenceGenerator не работает.

Вот быстрый пример использования уникального / общего @Id для двух объектов:

@Entity
public class Class1 {

  // setting pkColumnValue of TableGenerator is very important ;-)
  @Id
  @TableGenerator(
      name = "guid", 
      initialValue = 0, 
      allocationSize = 10, 
      table = "GUID_SEQ", 
      pkColumnName = "GEN_KEY", 
      valueColumnName = "GEN_VALUE", 
      pkColumnValue = "GUID")
  @GeneratedValue(strategy = GenerationType.TABLE, generator = "guid")
  private long id;
}


@Entity
public class Class2 {

  // use the same pkColumnValue 
  @Id
  @TableGenerator(
      name = "guid", 
      initialValue = 0, 
      allocationSize = 10, 
      table = "GUID_SEQ", 
      pkColumnName = "GEN_KEY", 
      valueColumnName = "GEN_VALUE", 
      pkColumnValue = "GUID")
  @GeneratedValue(strategy = GenerationType.TABLE, generator = "guid")
  private long id;
}
...