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
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).
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) –