比如 :
 Class A {
     @id
    private Integer id;
    .......其他属性
}
Class B{    
     @id
    private Integer id;
    //......其他属性
}Class AB{
     //如何映射成复合主键并且又是外键(注解方式)
     private A a;
     private B b;
     
    //.....其他属性

解决方案 »

  1.   

    Hibernate 不能这样实现
    除非给关系表加一个主键
      

  2.   

    都结贴了。我回复一个为后人造福吧。
    例子:
    @Entity
    @Table(name="T_CLIENT_INV")
    public class ClientInventoryDetail {
    private ClientInventoryDetailPK clientInventoryDetailPK;

    @EmbeddedId
    public ClientInventoryDetailPK getClientInventoryDetailPK() {
    return clientInventoryDetailPK;
    }
    public void setClientInventoryDetailPK(ClientInventoryDetailPK clientInventoryDetailPK) {
    this.clientInventoryDetailPK = clientInventoryDetailPK;
    }
    }
    public class ClientInventoryDetailPK implements Serializable {
    private static final long serialVersionUID = 6502053356833573635L;
    private FiscalYearPeriod fiscalYearPeriod;
    private Client client;
    private Items item;

    @ManyToOne
    @JoinColumn(name="FISCAL_PERIOD_ID")
    public FiscalYearPeriod getFiscalYearPeriod() {
    return fiscalYearPeriod;
    }
    public void setFiscalYearPeriod(FiscalYearPeriod fiscalYearPeriod) {
    this.fiscalYearPeriod = fiscalYearPeriod;
    }

    @ManyToOne
    @JoinColumn(name="CLIENT_ID")
    public Client getClient() {
    return client;
    }
    public void setClient(Client client) {
    this.client = client;
    }

    @ManyToOne
    @JoinColumn(name="ITEM_NO")
    public Items getItem() {
    return item;
    }
    public void setItem(Items item) {
    this.item = item;
    }

    @Override
    public boolean equals(Object o) {
    if(o instanceof ClientInventoryDetailPK) {
    ClientInventoryDetailPK pk = (ClientInventoryDetailPK)o;
    if(this.fiscalYearPeriod == pk.getFiscalYearPeriod() && this.client == pk.getClient() && this.item.equals(pk.getItem()))
    return true;
    }
    return false;
    }

    @Override
    public int hashCode() {
    return this.item.hashCode();
    }
    }