我有一个带有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: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属性的名称为id
)
@Entity
class Bas{
.
.
@OneToMany(mappedBy = "id.basboard" cascade = CascadeType.ALL)
private Set<BasPas> basPas;
.
.
.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句