Hibernate JPA Multipoint Composite Key

I am trying to customize my entity to allow pks. My database consists of two fields,

dealer_detail_id pk user_detail_id pk

Both join the identifier in the corresponding tables.

I have tried this so far without success.

@Embeddable public class DealerUserPk implements Serializable { private Integer dealerDetail; private Integer userDetail; 

Dealeruser

 @Embeddable @Table(name = "dealer_user", schema = "account") public class DealerUser implements Serializable { @EmbeddedId private DealerUserPk id; @Id @ManyToOne @JoinColumn(name = "dealer_detail_id", referencedColumnName = "id") private DealerDetail dealerDetail; @Id @ManyToOne @JoinColumn(name = "user_detail_id", referencedColumnName = "id") private UserDetail userDetail; 

DealerDetail

 @Entity @Table(name = "dealer_detail", schema = "account") public class DealerDetail implements Serializable { @Id private Integer id; 

Userdetail

 @Entity @Table(name = "user_detail", schema = "account") public class UserDetail implements Serializable { @Id private Integer id; 

Can anyone understand what I'm doing wrong?

+6
source share
2 answers

It is right:

 @Embeddable public class DealerUserPk implements Serializable { private Integer dealerDetail; private Integer userDetail; 
  • But your DealerUser is annotated with nested, it should be @Entity since you are using @Table annotation.
  • Need to add MapsId as follows

      @Entity @Table(name = "dealer_user", schema = "account") public class DealerUser implements Serializable { @EmbeddedId private DealerUserPk id; @MapsId("dealerDetail") @ManyToOne @JoinColumn(name = "dealer_detail_id", referencedColumnName = "id") private DealerDetail dealerDetail; @Id @MapsId("userDetail") @JoinColumn(name = "user_detail_id", referencedColumnName = "id") private UserDetail userDetail; 

Try it out.

+9
source

try it

  @Embeddable public class DealerUserPk implements Serializable { @ManyToOne private DealerDetail dealerDetail; @ManyToOne private UserDetail userDetail; public void setDealerDetail(DealerDetail dealerDetail) { this.dealerDetail=dealerDetail; } public DealerDetail getDealerDetail(){ return this.dealerDetail; } public void setUserDetail(UserDetail userDetail) { this.userDetail=userDetail; } public UserDetail getUserDetail() { return this.userDetail; } } 

and

  @Entity @Table(name = "dealer_user") public class ProductItem { @Id private DealerUserPk id= new DealerUserPk(); // --- For bidirectional association--- @SuppressWarnings("unused") @Column(name="dealer_detail_id", nullable=false, updatable=false, insertable=false) private Integer dealerDetail; @SuppressWarnings("unused") @Column(name="user_details_id", nullable=false, updatable=false, insertable=false) private Integer userDetail; // --- public void setDealerDetail(DealerDetail dealerDetail) { id.setDealerDetail(dealerDetail); } public DealerDetail getDealerDetail(){ return id.getDealerDetail(); } public void setUserDetail(UserDetail userDetail) { id.setUserDetail(userDetail); } public UserDetail getUserDetail() { return id.getUserDetail(); } } 
+1
source

All Articles