【问题标题】:JPA - How do I map to a quick-lookup table?JPA - 如何映射到快速查找表?
【发布时间】:2012-03-09 03:45:28
【问题描述】:

我有一个联系人实体,它有 >1 个电话号码 contact[contact, name, cell,work,home...],并且想要创建一个查找表 phone_number[uid,contactuid,telephonenumber],以便我可以通过电话号码搜索此表来查找联系人。

使用 JPA - 我将如何配置;

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

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

**Update - contact->phone_number 关系在 JPA 中定义还是在 DAO 中使用 SQL 映射它是明智的?

提前致谢

【问题讨论】:

    标签: java hibernate jpa data-modeling


    【解决方案1】:

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

    • 手机
    • 工作电话
    • 家庭电话

    并且您想在给定电话号码的情况下查找联系人。如果是这样,您不需要任何额外的表来执行此操作:

    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
    

    这肯定会更有效率。

    【讨论】:

    • 谢谢 JB - 是的,我正在寻找,但架构不是问题 - 是 JPA 关系(以及更新联系电话值时发生的调用)..
    • 对不起,我不明白你的问题。请编辑您的问题并说明您想做什么或您对 Java 代码有什么问题。
    • 该关系尚不存在 Java 代码(对联系人有效,但这是一个标准的联系人实体) - 从概念上更深入地研究这种关系如何(或是否)可以映射,如果是这样- 在 JPA 中这样做是明智的(更新了问题以反映这一点)......
    • 我的回答没有解释吗?您可以在联系人和电话之间建立双向 OneToMany 关联。只有在使用 JPA 时不寻常的极端情况下才需要 SQL。 JPQL 在 99% 的情况下就足够了。
    猜你喜欢
    • 2019-03-10
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多