Как получить доступ к полям встроенного класса в Spring JPA

У меня есть класс с 2 полями, помеченными @Id

 @Entity
 @Table(name = "baspas")
class BasPas
  @Id
  @ManyToOne
  @JoinColumn(name = "bas_id", referenceColumnName = "id")
  private Bas basboard;

  @Id
  @ManyToOne
  @JoinColumn(name = "pas_id", referenceColumnName = "id")
  private pas pasboard;
 //

Я преобразовал их в класс Embedded и вытащил два вышеуказанных поля @Id в классе BasPasPK. Это позволит мне создать интерфейс, который расширит интерфейс JPARepository.

   @Embeddable
   class BasPasPK {

      @ManyToOne
      @JoinColumn(name = "bas_id", referenceColumnName = "id")
      private Bas basboard;

      @ManyToOne
      @JoinColumn(name = "pas_id", referenceColumnName = "id")
      private pas pasboard;
     //

   }

Поскольку оба этих поля аннотированы @ManyToOne, существует еще один конец отношения, где в этих полях указано «mappedBy». для например.

   @Entity 
   class Another{
    .
    .

    @OneToMany(mappedBy = "basboard" cascade = CascadeType.ALL)
    private set<BasPas> basPas;
    .
    .
    .
}

Но после рефакторинга, как получить доступ к другому концу класса.

Я имею в виду, что когда я делаю mvn spring-boot:run, я получаю следующее исключение

org.hibernate.AnnotationException: mappedBy ссылается на неизвестное свойство целевого объекта

то, что я сделал, это изменить имя класса в

 @Entity
class Another{
        .
        .

        @OneToMany(mappedBy = "basboard" cascade = CascadeType.ALL)
        private Set<BasPas> basPas;
        .
        .
        .
    }

к этому

 class Another{
    .
    .

    @OneToMany(mappedBy = "bas" cascade = CascadeType.ALL)
    private set<BasPasPk> basPas; //changed the classname in angle brackets to BasPasPk
    .
    .
    .
}

Но после этого я начал получать следующее исключение.

org.hibernate.AnnotationException: использование @OneToMany или @ManyToMany для неотображенного класса.

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

Что именно BasPasPk установлено внутри Class Another?

Ver 11.03.2019 13:33
0
1
258
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы пытались аннотировать класс BasPas с помощью @Entity ?

Это уже сущность, извините, я забыл упомянуть об этом.

John Doe 11.03.2019 13:23
Ответ принят как подходящий

попробуйте так: (Предположим, что имя свойства BasPasPK в вашей сущности — id)

 @Entity
class Bas{
        .
        .

        @OneToMany(mappedBy = "id.basboard" cascade = CascadeType.ALL)
        private Set<BasPas> basPas;
        .
        .
        .
    }

Великолепно, должен сказать, что вы гениальны, такое простое решение, я бы догадался. Как вы поняли, что мы можем использовать id.fieldname, я имею в виду, можете ли вы указать мне какой-нибудь источник, чтобы узнать это более подробно.

John Doe 11.03.2019 21:33

чувак ты там

John Doe 18.03.2019 21:07

Другие вопросы по теме