如何使用 java.util.List 在 extra table 中映射 @ManyToMany 与主键

How mapping @ManyToMany with primary key in extra table using java.util.List

如果我这样做;

public class Client{

    @Id
    @Column(columnDefinition = "CHAR(11)")
    private String cpf;

    @ManyToMany(cascade = CascadeType.ALL)
    private List<Address> addresses;
    //get set
}

.

public class Address{

    @Id
    private String zipCode;

    @Id
    private String number;

    @Id
    @Column(columnDefinition = "varchar(255) default 'DONT HAVE'")
    private String complement;
    //get set
}

...我有这个映射:

Image - Model using java.util.List with @ManyToMany

如果我这样做;

public class Client{

    @Id
    @Column(columnDefinition = "CHAR(11)")
    private String cpf;

    @ManyToMany(cascade = CascadeType.ALL)
    private Set<Address> addresses;
    //get set
}

.

public class Address{

    @Id
    private String zipCode;

    @Id
    private String number;

    @Id
    @Column(columnDefinition = "varchar(255) default 'DONT HAVE'")
    private String complement;
    //get set
}

...我有这个映射:

Image - Model using java.util.Set with @ManyToMany

问题是: 如何获取由@ManyToMany 关系自动生成的额外table 的属性是使用java.util.List 的主外键(PFK)?

在我的 jpa 研究中,我们不需要在由 @ManyToMany 生成的额外 table 中创建主键。

这是我的最终解决方案:

public class Client{

   @Id
   @Column(columnDefinition = "CHAR(11)")
   private String cpf;

   @ManyToMany(cascade = CascadeType.ALL)
   @JoinTable(name="client_address", joinColumns = {
     @JoinColumn(name = "client_cpf") },
     inverseJoinColumns = { @JoinColumn(name = "address_zipcode", 
       referencedColumnName="zipCode"), @JoinColumn(name = "address_number", 
         referencedColumnName="number", @JoinColumn(name = 
         "address_complement", 
         referencedColumnName="complement"},
     uniqueConstraints = @UniqueConstraint(columnNames = {
       "client_cpf", "address_zipcode", "address_number",  
       "address_complement" })
   private List<Address> addresses;
   //get set
}