我创建了简单的设计以便于解释,这里是UML:
这是附件类代码:
@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;
...
}
和BookAttachment类:
@Entity
@DiscriminatorValue("BookAttachment")
public class BookAttachment extends Attachment{
@ManyToOne
@JoinColumn(name="Book_ID")
private Book book;
...
}
我的问题是,如何在Book类中进行双向关系?应该这样做吗? (这不是多态性,也不确定它是否是好的设计)
public class Book{
@OneToMany(mappedBy = "book", cascade = CascadeType.PERSIST)
private List<BookAttachment> bookAttachments;
...
}
或以下: 我还不知道如何使用mappedBy,因为附件类与Book没有关系。
public class Book{
@oneToMany
private List<Attachment> bookAttachments;
...
}
这个例子中没有使用多态吗? Book类不应与userAttachment相关。 (这个例子只是为了清楚地理解设计将如何。它不是真实的,所以我需要理解,如果不使用多态,在这种情况下,设计是好还是坏)。
答案 0 :(得分:0)
在我看来,没有正确的方法...... 同时你可以甚至在你的Book课程中实现两个选项,正确的一个取决于你的要求。
如果我必须选择一个,我会选择第二个,因为它更通用和模块化。
但是,当然,在你的第二个解决方案中,属性的名称是错误的!它应该是附件而不是bookAttachments。