如何访问 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;
.
.
.
}
我有一个 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;
.
.
.
}