为什么Hibernate选择相同的列4次?帮助绘制地图?
我的课看起来像这样。为什么同一列会被选中4次?映射有什么问题为什么Hibernate选择相同的列4次?帮助绘制地图?,hibernate,jpa-2.0,Hibernate,Jpa 2.0,我的课看起来像这样。为什么同一列会被选中4次?映射有什么问题 @Entity @Table(name="CLIENTS") public class Client implements Serializable { @Id @GeneratedValue @Column(name="GENERATED_ID") private Long id; @Column(name="NAME") private String name; @OneToMany(cascade=
@Entity @Table(name="CLIENTS")
public class Client implements Serializable {
@Id @GeneratedValue @Column(name="GENERATED_ID")
private Long id;
@Column(name="NAME")
private String name;
@OneToMany(cascade=CascadeType.ALL, mappedBy="client", fetch=FetchType.EAGER)
private Map<ParamPK, Param> params = new HashMap<ParamPK, Param>();
}
@Entity @Table(name="PARAMS")
public class Param implements Serializable {
@EmbeddedId
private ParamPK paramPK;
@Column(name="VALUE")
private String value;
@ManyToOne @MapsId("clientId")
private Client client;
}
@Embeddable
public class ParamPK implements Serializable {
@Column(name="PARAM_KEY")
private String key;
@Column(name="CLIENT_GENERATED_ID")
private Long clientId;
}
注意使用Hibernate 3.5.3。Rest样板代码已被删除为不相关的代码。您忘记告诉Hibernate什么是参数映射的键。将以下注释添加到此地图:
@OneToMany(cascade=CascadeType.ALL, mappedBy="client", fetch=FetchType.EAGER)
@MapKey(name = "paramPK")
private Map<ParamPK, Param> params = new HashMap<ParamPK, Param>();
@OneToMany(cascade=CascadeType.ALL,mappedBy=“client”,fetch=FetchType.EAGER)
@映射键(name=“paramPK”)
private Map params=new HashMap();
这告诉Hibernate Param实体的paramPK属性是映射的键。您能显示JPQL查询吗?不确定它是否有用,但您是否尝试在映射上添加MapKey(name=“paramPK”)注释?@Psy该查询是普通的
em.createQuery(“来自客户端”)
@JB您的解决方案现在已更改了“选择查询”中的列名,因此不再重复。这就解决了我的问题。请将您的回复作为答案发布。
@OneToMany(cascade=CascadeType.ALL, mappedBy="client", fetch=FetchType.EAGER)
@MapKey(name = "paramPK")
private Map<ParamPK, Param> params = new HashMap<ParamPK, Param>();