开发者

Why is Hibernate selecting same columns 4 times? Help with Mapping?

My classes look like these. Why does the same column get selected 4 times? What is problem with the mapping?

@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 {开发者_StackOverflow

  @Column(name="PARAM_KEY")
  private String key;

  @Column(name="CLIENT_GENERATED_ID")
  private Long clientId;
}

The queries generated by select gets same column 4 times.

/* from Client */ 
select
    client0_.GENERATED_ID as GENERATED1_1_,
    client0_.NAME as NAME1_ 
from
    CLIENTS client0_

/* load one-to-many Client.params */ 
select
    params0_.client_GENERATED_ID as client3_1_1_,
    params0_.client_GENERATED_ID as client3_1_,
    params0_.PARAM_KEY as PARAM1_1_,
    params0_.CLIENT_GENERATED_ID as CLIENT3_1_,
    params0_.client_GENERATED_ID as client3_0_0_,
    params0_.PARAM_KEY as PARAM1_0_0_,
    params0_.VALUE as VALUE0_0_ 
from
    PARAMS params0_ 
where
    params0_.client_GENERATED_ID=?

Note using Hibernate 3.5.3. Rest boilerplate code has been removed as irrelevant.


You forgot to tell Hibernate what constitutes the key of the map of parameters. Add the following annotation to this map:

@OneToMany(cascade=CascadeType.ALL, mappedBy="client", fetch=FetchType.EAGER)
@MapKey(name = "paramPK")
private Map<ParamPK, Param> params = new HashMap<ParamPK, Param>();

This tells Hibernate that the paramPK property of the Param entity is the key of the map.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜