0

我正在使用 Hibernate 和 MySql(两者的旧版本 - Seam 2 项目)。

我无法弄清楚如何设置我的映射表和实体注释,以便我可以“着色”两个实体之间的关系类型(就像我在图上着色边缘一样)。这是我的架构的近似值:

顾客

  • ID
  • 全名
  • 电话号码

店铺

  • ID
  • 分店名称
  • 地址第一行
  • 地址第二行

客户商店

  • 客户ID
  • store_id
  • 顾客类型

顾客类型

  • 价值(列举:个人、公司、内部)

设计我的 Hibernate 注释和模式以正确映射这些关系的最佳方法是什么?

我看过的方法:

  1. 我觉得我可以Set<Store>在对象上拥有三个属性Customer,每个属性一个CustomerType,或者一个Set<Store> getStores(CustomerType)方法。不过,我不知道如何制作这种映射,而且我很难找到适用于这种特定场景的文档。
  2. 我可以将我的架构更改为每个customertype( customer_store_individual,customer_store_corporate等) 都有一个表。这感觉是多余的,但它会解决问题。不过,我更愿意让 hibernate 做一些魔术来整理这个映射并将它们组合到一个表中。
  3. customer_store我可以为桌子制作一个实体。这感觉就像一个非常糟糕的解决方法。 这个答案已经涵盖了这种类型的关系,虽然我不喜欢这个解决方案。

请注意,我试图混淆我的域,因此请避免对客户提出建议或自行存储对象。让我们假设我的域对象被正确分解,并且它们是真正的多对多关系。它只是区分我遇到问题的每个链接的类型:)

4

1 回答 1

0

我不知道这是否是最好的解决方案,但我会使用关系的值对象

@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;
}
于 2012-06-08T06:59:32.387 回答