2012-08-15 111 views
0

在数据库中保存类似数据的映射我不知道如何设计此rdbms问题:如何使用JPA

比方说,我有一个正在进行购买的客户。通过购买他离开他的数据。我有第二个包含真实客户数据的数据集。收集数据后,我想通过算法找到收集的客户数据到真实客户的映射。

目前仍不清楚如何保存此算法创建的映射/这些链接。

建议:

@Entity 
public class Purchase{ 
    @OneToOne 
    private Customerdata customerData; 
} 

@Entity 
public class CustomerData{ 
    private String firstName; 
    private String Lastname; 
    private String city; 
} 

@Entity 
public class RealCustomer{ 

    @OneToMany(cascade=CascadeType.ALL, mappedBy ="RealCustomer") 
    private List<CustomerData> customerData = new ArrayList<CustomerData>(); 
    private String firstName; 
    private String Lastname; 
    private String city; 
} 

现在我可以从RealCustomer数据我假设映射保存客户数据在customerData列表。

我想这不是最好的主意?

希望能给你提供很好的建议。我可以利用真实客户数据和获取客户数据的相似性。

请注意,我想保留不一致的数据,例如即使城市是相似的('华盛顿特区'和'华盛顿'),我不想丢失这个信息,我可以再次运行匹配算法

注意:我没事,如果你提供给我粗略的想法。的Java/JPA的代码没有必要的。

非常感谢你提前!

回答

1

你可以做类似下面

@Entity 
public class Purchase{ 
@OneToOne 
private Customer customer; 
} 

@Entity 
public class Customer{ 
private String firstName; 
private String Lastname; 
private String city; 
//Below association will only come in picture if customer has real customer data  available when you are collecting the data this way you can clearly identify and separate collected vs real customers 
@OneToOne 
Customer realCustomer; 
} 
+0

所以是很容易(和有效),然后找出,哪个购买'真实顾客'? 一试: SELECT c.purchase FROM customer c WHERE c.realCustomer.id =(SELECT d.id FROM customer d WHERE d.name ='xxx') 不是更有效率,如果我将这两种类型存储在不同的表? – user1141785 2012-08-15 18:59:36

+0

您可以简单地在现有实体中添加一个标志,以确定其是否为真实的, isReal,它会解决你提到的问题。基本的想法仍然保持不变 – 2012-08-15 19:05:38