Why does Hibernate select the same columns 4 times? Help with mapping?

My classes look like this. Why is the same column selected 4 times? What is a display issue?

@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; } 

Queries generated by select receive the 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. The security template code was deleted as non-essential.

+4
source share
1 answer

You forgot to tell Hibernate what makes up the parameter map key. 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 object is the key to the map.

+3
source

Source: https://habr.com/ru/post/1368962/


All Articles