两个类之间的JPA关系



我有一项任务要构建一个包含标题和行的文档。例如,包含标题(日期、库存)和行(材料、数量、价格、总额)的"库存收入"文档。我的问题是,我不确定我班的建筑是否正确。代码在这里(JPA+Hibernate):

@Entity
@Table
public class Document extends BaseEntity {
@Column
@Temporal(TemporalType.DATE) 
private Date date;
@Column
@Temporal(TemporalType.DATE) 
private Date createDate;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<DocumentRow> rows;
...
}
public class DocumentRow extends BaseEntity {
@ManyToOne(optional = false, cascade = CascadeType.ALL)
private Document document;
@Column(nullable = false, unique = true)
private Integer row;
...
}
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
private static final long serialVersionUID = 8171308450531596347L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; ...}

您正在进行双向映射,并且无法组合@ManyToOne@ManyToMany,尽管您正在应用逻辑,但sql是不正确的,因为:

@ManyToMany将产生一个关联表ManyToOne只是另一个实体上的父实体的外键。

如果DocumentRow元素可以在两个不同的Document之间共享,那么您需要一个ManyToMany关系,这将导致创建一个joinTable,并且如果您想要双向关系,则必须更改DocumentRow表上的@ManyToOne

@ManyToMany
private List<Document> documents;

如果不是这样,并且DocumentRow只属于一个文档,那么您需要将父类Document上的映射从@ManyToMany更改为@OneToMany,方法如下:

@Entity
@Table
public class Document extends BaseEntity {
@Column
@Temporal(TemporalType.DATE) 
private Date date;
@Column
@Temporal(TemporalType.DATE) 
private Date createDate;
@OneToMany(mappedBy="document",...)
private Set<DocumentRow> rows;
...
}

相关内容

  • 没有找到相关文章

最新更新