Mysql 如何定义指定关系类型的多对多关系?
我正在使用Hibernate和MySql这两个旧版本的Seam 2项目 我很难弄清楚如何设置映射表和实体注释,这样我就可以给两个实体之间的关系类型上色,就像给图形上的边上色一样。以下是我的模式的近似值: 顾客 身份证件 全名 电话号码 贮藏 身份证件 布兰奇纳姆 地址第一行 地址第二行 顾客商店 客户识别码 商店标识 客户类型 客户类型 列举的价值:个人、公司、内部 设计Hibernate注释和模式以正确映射这些关系的最佳方法是什么? 我研究过的方法: 我觉得在Customer对象上可以有三个集合属性,每个CustomerType一个,或者一个集合getStoresCustomerType方法。但我不知道如何进行这种映射,我很难找到这种特定场景的文档。 我可以将我的模式更改为每个customertype customer\u store\u individual、customer\u store\u corporate等都有一个表。这感觉是多余的,但可以解决问题。不过,我更愿意让hibernate发挥一些魔力来整理这个映射,并将它们组合到一个表中。 我可以为customer\u store表创建一个实体。这感觉像是一个非常讨厌的工作,虽然我不喜欢这个解决方案。Mysql 如何定义指定关系类型的多对多关系?,mysql,hibernate,relational-database,Mysql,Hibernate,Relational Database,我正在使用Hibernate和MySql这两个旧版本的Seam 2项目 我很难弄清楚如何设置映射表和实体注释,这样我就可以给两个实体之间的关系类型上色,就像给图形上的边上色一样。以下是我的模式的近似值: 顾客 身份证件 全名 电话号码 贮藏 身份证件 布兰奇纳姆 地址第一行 地址第二行 顾客商店 客户识别码 商店标识 客户类型 客户类型 列举的价值:个人、公司、内部 设计Hibernate注释和模式以正确映射这些关系的最佳方法是什么? 我研究过的方法: 我觉得在Customer对象上可以有三个集
请注意,我试图混淆我的域,因此请避免对客户或存储对象本身提出建议。让我们假设我的域对象被正确分解,并且它们确实是多对多关系。这只是区分我遇到问题的每个链接的类型:我不知道这是否是最好的解决方案,但我会选择一个值对象作为关系
@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条件的多个存储/客户或只读集合