如何访问 Spring JPA 中嵌入的 class 的字段

How to access the fields of an embedded class in Spring JPA

我有一个 class,其中有 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;
 //

我将它们重构为嵌入式 class 并在 BasPasPK class 中提取了上述两个 @Id 字段。这将使我能够创建一个接口来扩展 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;
    .
    .
    .
}

但是重构后如何访问class的另一端。

我的意思是当我执行 mvn spring-boot:运行 时出现以下异常

org.hibernate.AnnotationException:mappedBy 引用未知目标实体属性

然后我所做的就是更改

中的 class 名称
 @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 定位未映射的 class。

如何解决这个问题,我的意思是如何在将这两个 属性 拉到嵌入式 class.

之后访问另一个 class 中的这些属性

您是否尝试过使用 @Entity 注释 class BasPas?

这样试试:(假设您实体中 BasPasPK 属性 的名称是 id

 @Entity
class Bas{
        .
        .

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