2012-04-26 3 views
0

Cela fait maintenant deux jours que je contourne ce problème sans réellement atteindre le but. Je voudrais créer une relation OneToMany entre un objet et certaines interfaces. Ceci est l'exemple de baseCréer un mappage OneToMany d'une interface

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

Je peux certainement faire une requête comme celui-ci pour obtenir tous ContactFacade pour un contact donné:

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

Mais je n'ai pas été en mesure de carte vraiment comme un attribut à une autre classe. Est-ce possible de le faire? Y a-t-il un autre moyen? Je voudrais vraiment détester garder une entité à l'intérieur de la Contact juste à la requête.

Répondre

0

Associez le ContactFacade à une classe Contact abstraite, pour que chaque façade qui lui est appliquée implémente 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() { } 
} 
... 
Questions connexes