Hibernate JPA ManyToOne复合键

Cod*_*kie 10 java hibernate jpa

我正在尝试设置我的实体以允许pks.我的数据库包含两个字段,

dealer_detail_id pk user_detail_id pk

两者都在相应的表中加入id.

到目前为止,我已经尝试过这个但没有成功.

@Embeddable
public class DealerUserPk implements Serializable {

    private Integer dealerDetail;
    private Integer userDetail;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

DealerDetail

@Entity
@Table(name = "dealer_detail", schema = "account") 
public class DealerDetail implements Serializable {

    @Id
    private Integer id;
Run Code Online (Sandbox Code Playgroud)

UserDetail

@Entity
@Table(name = "user_detail", schema = "account") 
public class UserDetail implements Serializable {

    @Id
    private Integer id;
Run Code Online (Sandbox Code Playgroud)

谁能发现我做错了什么?

Koi*_*oer 12

这是对的:

@Embeddable
public class DealerUserPk implements Serializable {

    private Integer dealerDetail;
    private Integer userDetail;
Run Code Online (Sandbox Code Playgroud)
  1. 但是你的DealerUser带有嵌入式注释,它应该是@Entity,因为你正在使用@Table注释.
  2. 需要添加MapsId,如下所示

     @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;
    
    Run Code Online (Sandbox Code Playgroud)

试试吧.


San*_*mar 1

尝试这个

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

 }
Run Code Online (Sandbox Code Playgroud)

 @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();
    }
  } 
Run Code Online (Sandbox Code Playgroud)