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

问题描述 投票:0回答:2

我有一个有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类,并在BasPasPK类中提取上述两个@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;
    .
    .
    .
}

但在重构​​后如何访问该类的另一端。

我的意思是当我在做mvn spring-boot时:运行我得到以下异常

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定位未映射的类。

如何解决这个问题,我的意思是如何在嵌入类中提取这两个属性后访问其他类中的这些属性。

spring hibernate spring-data-jpa spring-data hibernate-mapping
2个回答
1
投票

试试这种方式:(假设你的实体中BasPasPK属性的名称是id

 @Entity
class Bas{
        .
        .

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

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.