我有两个模型,分别名为Style和StyleExp,它们各自有对应的主键类,并且我正在使用JPA进行映射。
Style类包含四个变量,即pid、Sname、Screen和StyleId。而StyleExp类具有名为StyleId、EId、sno和exp的变量。
在Style类中,pid、Sname和Scrn是主键,在StyleExp类中,StyleId和EId是主键。这两个类之间存在一对多的关系。
我已经在Style类中提供了以下映射:
@Entity(name="Style")
@Table(name="Style")
@IdClass(StylePk.class)
public class Style implements Serializable{
@Id
private String pid;
@Id
private String Sname;
private String styleId;
.....
@OneToMany(fetch=FetchType.Lazy, mappedBy="style")
protected List<StyleExp> styleExp;
}
在STyleExp类中,我提供了以下的映射:
@Entity(name="StyleExp")
@Table(name="StyleExp")
public class StyleExp implements Serializable{
@Id
private String styleId;
@Id
private String eId;
@ManyToOne(fetch=FetchType.Lazy)
@JoinColumns({
@JoinColumn(name="styleId",
referencedColumnName="styleId",insertable=false,updatable=false)
})
protected Style style;
}
但是当我运行这段代码时,从Style类中获取StyleExp列表。
Style style = styleDao.getStyle(pid, Sname, Scrn)
List<StyleExp> styleExpList = style.getStyleExp();
它抛出以下错误
原因:org.hibernate.AnnotationException: StyleExp.style的referencedColumnName(styleId)引用了model.Style中未映射到单个属性的字段
所以请告诉我我犯了什么错误?还有一个问题是,非主键和主键之间的OneToMany和ManyToOne映射在JPA中是否可行? 因为非主键映射到主键是上述情况的问题吗?
请帮助我。 提前致谢。