0

我有如下实体存根:

@Entity
public class Company extends AbstractEntity{

    private String name;
    private String address;
    private String zipCode;
    private String city;
    private String owner;
    private String website;
    private String emailAddress;
    private String phoneNumber;
    private String faxNumber;
    private List<Category> categories;
    private Map<Category, ServiceType> serviceType;

}

如您所见,这里的目标是创建一个映射 ( serviceType),其中键是另一个集合属性的成员(这里的属性是categories)。换句话说,我想ServiceType获取Category存储categoriesCategory是另一个映射实体;我如何使用注释来实现该目标?使用Hibernate 4.2.1.Final

4

1 回答 1

1

如果您在 和 之间有一个连接表,CompanyCategory有一个额外的列来给出,那么您可以通过注释ServiceType来实现这一点。@ElementCollection查看此博客文章或在网上搜索更多示例。基本上,你可以使用@OneToMany@ManyToMany放在categories集合上,然后@ElementCollection放在地图上,如下所示。

@ElementCollection
// company_id is the column that connects the company table to the join table
@CollectionTable(name = "company_category_servicetypes", joinColumns = @JoinColumn(name = "company_id", insertable=true, updatable=true))
// service_type is the "extra" information you want on the relation, basically the value in the map
@Column(name = "service_type", insertable=true, updatable=true)
// category_id is the other side of the join table (connecting to the category table)
@MapKeyJoinColumn(name = "category_id", insertable=true, updatable=true)
private Map<Category, ServiceType> serviceType;

如果您采用这种方法,我建议您完全摆脱该categories列表。如果多次映射同一个关系/连接表,可能会导致问题和混乱。如果您有一些代码只需要公司的类别,而忽略服务类型,则可以keySetserviceType地图中获取。

于 2013-10-29T14:02:48.817 回答