Как получить доступ к полям встроенного класса в Spring JPA - PullRequest
0 голосов
/ 11 марта 2019

У меня есть класс с 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 для таргетинга на неподключенный класс.

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

Ответы [ 2 ]

1 голос
/ 11 марта 2019

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

 @Entity
class Bas{
        .
        .

        @OneToMany(mappedBy = "id.basboard" cascade = CascadeType.ALL)
        private Set<BasPas> basPas;
        .
        .
        .
    }
1 голос
/ 11 марта 2019

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

...