Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Hibernate选择相同的列4次?帮助绘制地图?_Hibernate_Jpa 2.0 - Fatal编程技术网

为什么Hibernate选择相同的列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=

我的课看起来像这样。为什么同一列会被选中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=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>();