У меня есть ответ на этот вопрос SO, так как мы несколько JPA версии далее с 2010 года и как указано в комментариях под ответом:
Я пробовал... КАЖЕТСЯ работает только потому, что размер выделения равен 1. Но на самом деле создаются отдельные генераторы и работают отдельно. Если вы выберете размер распределения больше 1, вы увидите, что у вас будут разные диапазоны идентификаторов для каждой сущности. (Здесь используется Hibernate 3.6, может быть, он лучше работает с 4.x?)
Я хочу использовать один @TableGenerator
для создания идентификаторов для нескольких объектов JPA. Итак, давайте предположим две сущности:
@Entity
public class MaritalStatus {
@Id
@TableGenerator(
name = "appSeqStore",
table = "APP_SEQ_STORE",
pkColumnName = "NAME",
pkColumnValue = "ReferenceTables",
valueColumnName = "VALUE",
initialValue = 0,
allocationSize = 11)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "appSeqStore")
private Long id;
}
и
@Entity
public class Country {
@Id
// Can I reference the same generator here?
@GeneratedValue(strategy = GenerationType.TABLE, generator = "appSeqStore")
private Long id;
}
Обе сущности не связаны, поэтому нет @MappedSuperclass
или чего-то в этом роде, первая хранит семейное положение, а вторая страны. Тем не менее, я хочу, чтобы они получали идентификаторы из одной и той же последовательности, поэтому никогда не будет совпадения идентификаторов семейного положения и стран. Оба идентификатора также должны быть 11-доказательными.
Вопросы:
- Если мне не нужен
@MappedSuperclass
, могу ли я работать с одним@TableGenerator
или мне нужно копировать генератор в каждую сущность? - Если первый вопрос невозможен, и я использую
@MappedSuperclass
, это решение, чтобы остановить дублирование кода?
Я использую Hibernate JPA 2.1 на WildFly 8.2.