Общая базовая сущность JPA разделяет последовательности первичных ключей

У меня есть UserAuthenticationEntity, происходящий от BaseEntity.

@MappedSuperclass
public class BaseEntity implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_seq_generator")
  @SequenceGenerator(name = "user_seq_generator", sequenceName = "user_seq", allocationSize = 1)
  private Long id;

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }
}

@Entity
@Table(name = "user_authentication")
public class UserAuthenticationEntity extends BaseEntity {

  private String username;
  private String password;

  public UserAuthenticationEntity(String username, String password){
    this.username = username;
    this.password = password;
  }
  ...
  ...

}

Все будущие сущности будут расширять класс BaseEntity.

Возможно ли, что все объекты наследуют свойство id от класса BaseEntity, но имеют отдельные последовательности для генерации первичных ключей?

Я знаю, что это запутанный сценарий, но я думаю, что наличие базового класса сущностей — отличное место для определения свойства id для всех классов сущностей, но невозможность использовать разные последовательности — своего рода нарушение условий сделки. Не уверен, что это можно сделать.

Также приветствуется любой альтернативный/лучший дизайн для классов сущностей.


person Meena Chaudhary    schedule 28.07.2019    source источник


Ответы (1)


Я думаю, это плохая идея использовать наследование с идентификаторами сущностей.

Обычно каждый объект содержит атрибут id с аннотариями @Id и @GeneratedValue, и для наследования общих атрибутов используется наследование. Но, если вы хотите попробовать, вы можете взглянуть на вопрос ниже:

Переопределение @Id, определенного в @MappedSuperclass с помощью JPA

person Jaume Morón i Tarrasa    schedule 28.07.2019