Как настроить класс Entity для таблицы базы данных MySQL с отношением n: m и несколькими первичными ключами - PullRequest
0 голосов
/ 10 мая 2019

Когда я запускаю весенний загрузочный проект, я получаю следующую ошибку "Ошибка вызова метода init; вложенное исключение - org.hibernate.AnnotationException: для сущности не указан идентификатор:"

У меня есть несколько других классовс несколькими первичными ключами и внешними ключами, но они не запускаются с ошибкой.

import javax.persistence.*;

@Entity
@Table(name="roles_has_features")
public class RoleFeatures {


    @Column(name = "role_id_fk")
    private Long roleIdFk;


    @Column(name = "feature_id_fk")
    private Long featureIdFk;



    public Long getRoleIdFk() { return roleIdFk; }

    public void setRoleIdFk(Long roleIdFk) { this.roleIdFk = roleIdFk; }

    public Long getFeatureIdFk() { return featureIdFk; }

    public void setFeatureIdFk(Long featureIdFk) { this.featureIdFk = featureIdFk; }


}

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Сообщение об ошибке описывает проблему довольно хорошо:

Для сущности не указан идентификатор

В вашей сущности RoleFeatures нет аннотированного столбца @Id. Таким образом, hibernate не может идентифицировать объект в базе данных и отказывается запускаться.

Ваша так называемая сущность больше похожа на отношения «многие ко многим». Может быть, лучше пойти по этому пути.

Примерно так:

@Entity
public class Role {
  @Id
  @Column(name = "role_id")
  private Long id;

  @ManyToMany
  @JoinTable(name = "roles_has_features",
      joinColumns = @JoinColumn(name = "feature_id_fk", referencedColumnName = "feature_id"), 
      inverseJoinColumns =  @JoinColumn(name = "role_id_fk", referencedColumnName = "role_id"))
  private List<Feature> features;

...

}

Смотри также: https://www.baeldung.com/jpa-many-to-many

1 голос
/ 10 мая 2019

Это на самом деле не имеет ничего общего с Spring.Это ошибка, выдаваемая Hibernate, потому что спецификация JPA требует идентификатора для каждого объекта.Что касается вашего случая, я бы не советовал создавать отдельную сущность, потому что, насколько я понимаю из имен ваших столбцов, это просто отображение для связи между таблицей ролей и функций.Я бы предложил JPA отношения «многие ко многим».Посмотрите на аннотации @ManyToMany и @JoinTable.

Также это выглядит как действительно хороший учебник для меня

Hibernate - пример "многие ко многим"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...