JPA - 如何映射到快速查找表?

时间:2012-03-08 18:58:27

标签: java hibernate jpa data-modeling

我有一个联系人实体,其中包含> 1个电话号码contact[contact, name, cell,work,home...],并希望创建一个查找表phone_number[uid,contactuid,telephonenumber],以便我可以通过电话号码搜索此表以查找联系人。

使用JPA - 我将如何配置;

  • 映射phone_number实体,以便从联系实体
  • 填充实体
  • 删除联系人号码后删除phone_number记录(或删除联系人,删除所有记录)
  • 在联系人号码更改时更改phone_number记录?

我希望在DAO中完成所有这些,因为这不是真正的域逻辑。

**更新 - 在JPA中定义的contact->phone_number关系是否合理,或者只是在DAO中使用SQL映射它?

非常感谢提前

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您已经拥有一个包含多个电话号码字段的联系人实体:

  • 手机
  • 办公电话
  • HOMEPHONE

并且您希望找到一个给出电话号码的联系人。如果是这样,您不需要任何其他表来执行此操作:

select c from Contact c 
where c.cellPhone = :phoneNumber 
   or c.workPhone = :phoneNumber 
   or c.homePhone = :phoneNumber

但也许您应该拥有一个带有phoneNumbertype(工作,单元格等)字段的Phone实体,并且在Contact和Phone之间具有双向OneToMany关联。您的查询将是

select c from Phone p
inner join p.contact c
where p.phoneNumber = :phoneNumber

肯定会更有效率。