2017-10-06 83 views
0

如何将复合唯一键(地址1和地址2)作为Map键。像@MapKey(name =“address1”,name =“address2”),而不是唯一的唯一键@MapKey(name =“address1”)。EclipseLink MapKey复合唯一键

@Entity 
public class Person { 
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "person") 
    @MapKey(name = "address1") 
    public Map<String, Address> getAddressMap() { 
     return addressMap; 
    } 

} 



@Entity 
public class Address { 
    private Integer id; 
    private String address1; 
    private String address2; 
    private Person person; 

} 

回答

0

使用嵌入式类型。

创建一个可嵌入的类(即PersonAddress)来封装您的address1address2属性。然后使用该嵌入类作为Map键。

@Entity 
public class Person { 
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "person") 
    public Map<PersonAddress, Address> getAddressMap() { 
     return addressMap; 
    } 

} 

@Entity 
public class Address { 
    private Integer id; 

    @Embedded 
    private PersonAddress; 

    @ManyToOne 
    private Person person; 
} 

@Embeddable 
public class PersonAddress { 
    private String address1; 
    private String address2; 
}