【发布时间】:2015-06-11 18:00:46
【问题描述】:
我有两个名为 Style 和 StyleExp 的模型及其各自的 PK 类,并且我正在使用 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;
}
In the class STyleExp I have provided the Mapping as follows,
@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();
它会抛出以下错误
causedBy : org.hibernate.AnnotationException: referencedColumnName(styleId) of StyleExp.style 引用 model.Style 未映射到单个属性
所以请让我知道我在做什么错误?对我来说还有一个疑问是非主键和主键 OneToMany 和 ManyToOne 映射在 JPa 中是可能的吗? 由于非主键映射到主键是上述情况的问题吗?
请帮助我。 提前致谢。
【问题讨论】:
-
不要描述你的代码。发布它。
-
我已经在我的帖子中添加了代码。请检查。
-
您的映射没有多大意义。如果 StyleExp 中的 styleId 足以唯一标识一个 Style,那么它应该是 Style 的唯一标识符,pid 不应该是它的一部分。我的建议:避免像瘟疫那样的复合键。使用单列、纯技术、自动生成的 ID。
-
感谢您的宝贵意见。这个方法我试试
-
感谢尼泽特。我尝试在 Style 类中用 @Id 标记 styleId。成功了