【问题标题】:Create a OneToMany mapping of an interface创建接口的 OneToMany 映射
【发布时间】:2012-04-26 18:44:29
【问题描述】:

这几天我一直在解决这个问题,但实际上并没有取得什么成就。我想在对象和某些接口之间创建 OneToMany 关系。这是基本示例

public class Contact {
  @OneToMany(mappedBy = "contact")
  private List<ContactFacade> facades;
}

public interface ContactFacade {
  public Contact getContact() { }
}

public class ContactFacebook implements ContactFacade {
  @ManyToOne
  private Contact contact;
  public Contact getContact() { }
}

public class ContactTwitter implements ContactFacade {
  @ManyToOne
  private Contact contact;
  public Contact getContact() { }
}

我当然可以通过这样的查询来获取给定联系人的所有ContactFacade

SELECT package.name.ContactFacade WHERE contact.id = :theid

但我无法真正将其作为属性映射到另一个类。有可能做到这一点吗?还有其他方法吗?我真的很讨厌在 Contact 中保留一个实体,只是为了查询。

【问题讨论】:

    标签: hibernate jpa hql


    【解决方案1】:

    ContactFacade 与抽象的Contact 类相关联,让延伸到它的每个外观都实现getContact(..)。

    public interface ContactFacade {
      public Contact getContact() { }
    }
    
    @Entity
    @Inheritance
    public abstract class Contact implements ContactFacade {
    private Set<Contact > contacts;
    
       @OneToMany(cascade = CascadeType.ALL, mappedBy = "contact")
       public Set<Contact> getContacts() {
           return notes;
       }
    }
    
    @Entity
    public class ContactFacebook extends Contact {
      @ManyToOne
      private Contact contact;
      public Contact getContact() { }
    }
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多