2017-09-15 4 views
0

J'ai créé une conception simple pour faciliter l'explication, voici l'UML:en utilisant le polymorphisme ou non mise en veille prolongée mapping au tableau unique

enter image description here

ici est le code de classe Pièce jointe:

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) 
@DiscriminatorValue("Attachment") 
@Table(name = "ATTACHMENTS") 
public class Attachment { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="ID") 
    private long id; 

    @ManyToOne 
    @JoinColumn(name = "USER_ID") 
    private User user; 
... 
} 

et pour la classe BookAttachment:

@Entity 
@DiscriminatorValue("BookAttachment") 
public class BookAttachment extends Attachment{ 

    @ManyToOne 
    @JoinColumn(name="Book_ID") 
    private Book book; 
    ... 
    } 

Ma question h Comment puis-je faire la relation bidirectionnelle dans la classe Book? devrait-il être fait comme ça? (Ce n'est pas polymorphisme et ne sais pas s'il est bon design)

public class Book{ 

    @OneToMany(mappedBy = "book", cascade = CascadeType.PERSIST) 
    private List<BookAttachment> bookAttachments; 
... 
} 

ou les éléments suivants: Je ne sais pas encore comment puis-je utiliser la mappedBy comme la classe d'attache n'ont pas rapport au livre.

public class Book{ 

    @oneToMany 
    private List<Attachment> bookAttachments; 
... 
} 

n'utilise pas de polymorphisme dans cet exemple? La classe Book ne doit pas être liée à userAttachment. (L'exemple est juste pour fournir une compréhension claire de la façon dont le design sera, ce n'est pas un vrai, donc je dois comprendre si l'utilisation du polymorphisme, dans ce cas, est bonne ou mauvaise conception).

Répondre

0

À mon avis, il n'y a pas de manière correcte ... vous pouvez même avoir les deux options mises en œuvre dans votre classe de livre dans le même temps , une bonne dépend de vos besoins.

Si je dois en choisir un, je choisirais le second car il est plus général et modulaire. Mais, à coup sûr, dans votre deuxième solution, le nom de l'attribut est faux! Ce devrait être des pièces jointes au lieu de bookAttachments.

+0

dans la deuxième solution, comment est le mappage correct? (Gardez à l'esprit qu'il n'y a pas de relation entre l'attachement et le livre, donc ne savez pas comment le Hibernate rejoint ces tables) –