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.
精彩评论