2012-04-26 46 views
0

我已经绕了几天而没有真正实现。我想创建一个对象和一些接口之间的OneToMany关系。这是基本的例子创建一个接口的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中的实体留在查询中。

回答

0

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() { } 
} 
...