两者之间的 JPA 关系 类

JPA relation between two classes

我的任务是构建包含 header 和行的文档。 例如,包含 header(日期、股票)和行(material、数量、价格、总和)的股票收入文档。我的问题是我不确定我的类架构是否正确。代码在这里(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 将导致关联 Table ManyToOne 只是另一个实体上父实体的外键。

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

@ManyToMany
private List<Document> documents;

如果不是这种情况并且 DocumentRow 只属于一个文档,那么您需要更改父 class 上的映射,即 Document 来自 [=13] =] 到 @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;
...
}