Mysql 如何定义指定关系类型的多对多关系?

Mysql 如何定义指定关系类型的多对多关系?,mysql,hibernate,relational-database,Mysql,Hibernate,Relational Database,我正在使用Hibernate和MySql这两个旧版本的Seam 2项目 我很难弄清楚如何设置映射表和实体注释,这样我就可以给两个实体之间的关系类型上色,就像给图形上的边上色一样。以下是我的模式的近似值: 顾客 身份证件 全名 电话号码 贮藏 身份证件 布兰奇纳姆 地址第一行 地址第二行 顾客商店 客户识别码 商店标识 客户类型 客户类型 列举的价值:个人、公司、内部 设计Hibernate注释和模式以正确映射这些关系的最佳方法是什么? 我研究过的方法: 我觉得在Customer对象上可以有三个集

我正在使用Hibernate和MySql这两个旧版本的Seam 2项目

我很难弄清楚如何设置映射表和实体注释,这样我就可以给两个实体之间的关系类型上色,就像给图形上的边上色一样。以下是我的模式的近似值:

顾客

身份证件 全名 电话号码 贮藏

身份证件 布兰奇纳姆 地址第一行 地址第二行 顾客商店

客户识别码 商店标识 客户类型 客户类型

列举的价值:个人、公司、内部 设计Hibernate注释和模式以正确映射这些关系的最佳方法是什么? 我研究过的方法:

我觉得在Customer对象上可以有三个集合属性,每个CustomerType一个,或者一个集合getStoresCustomerType方法。但我不知道如何进行这种映射,我很难找到这种特定场景的文档。 我可以将我的模式更改为每个customertype customer\u store\u individual、customer\u store\u corporate等都有一个表。这感觉是多余的,但可以解决问题。不过,我更愿意让hibernate发挥一些魔力来整理这个映射,并将它们组合到一个表中。 我可以为customer\u store表创建一个实体。这感觉像是一个非常讨厌的工作,虽然我不喜欢这个解决方案。
请注意,我试图混淆我的域,因此请避免对客户或存储对象本身提出建议。让我们假设我的域对象被正确分解,并且它们确实是多对多关系。这只是区分我遇到问题的每个链接的类型:

我不知道这是否是最好的解决方案,但我会选择一个值对象作为关系

@Entity
public class Customer
{
    // to get all stores
    @ElementCollection
    public Set<StoreCustomer> stores;

    // to get specific stores
    public Set<Store> getStores(CustomerType);
}

@Entity
public class Store
{
    // to get all customers
    @ElementCollection
    public Set<StoreCustomer> customers;

    // to get specific customers
    public Set<Customer> getCustomers(CustomerType);
}

@Embeddable
public class StoreCustomer
{
    @ManyToOne
    public Customer customer;

    @ManyToOne
    public Store store;

    public CustomerType type;
}

我将如何实现这些功能?Customer.getStores和Store.getCustomers方法是定制的临时方法,还是有办法让hibernate为我自动映射它们?两者都是可能的。自定义方法,该方法在customertype列上过滤映射为具有sqlwhere条件的多个存储/客户或只读集合