【发布时间】:2019-09-29 15:33:30
【问题描述】:
我有一个实体 bean,它与 @ManyToOne 的关系在一个列上加入。
@Entity
@Table(name = "work_order")
public class WorkOrder implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@NotNull
@Column(name = "id_order", nullable = false)
private String idOrder;
@Column(name = "description")
private String description;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private StatusOrder status;
@Column(name = "creation_date")
private Instant creationDate;
@Column(name = "closing_date")
private Instant closingDate;
@Column(name = "client_id")
private Long clientId;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @NotFound (action = NotFoundAction.IGNORE)
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "account", insertable = false, updatable = false, nullable = true)
private AnagraficaClienti account;
还有第二个实体
@Entity
@Table(name = "es_account")
public class AnagraficaClienti implements Serializable {
private static final long serialVersionUID = 1L;
// da rimettere a @NotNull
@Column(name = "fk_cod_azienda", nullable = true)
private String fk_cod_azienda;
@Id
@NotNull
@Column(name = "account", nullable = false)
private String account;
// da rimettere a @NotNull
@Column(name = "tipo_cli_for", nullable = true)
private String tipoClienteFornitore;
@Column(name = "tipo_account", nullable = true)
private String tipoAccount;
....
“es_account”表具有三个不可为空的主键(fk_cod_azienda、account、tipo_cli_for),与“work_order”表的关系是按帐户列。
我的问题是,有时用户可能会使用空帐户值插入或更新 WorkOrder,而 AnagraficaClienti 实体无法避免这种情况,因为它需要一个非空(且不重复)值。
当帐户为空时,是否有任何方法可以绕过与 AnagraficaClienti 的联接?
【问题讨论】:
-
只需将关系移动到 AnagraficaClienti 类并更改为 @OneToMany。使关系可为空。当您只想插入 WorkOrder 时,请执行此操作。当您要创建关系时,将托管实体 WorkOrder 添加到工作订单列表中,该列表由相应的 AnagraficaClienti 拥有
-
@thanhngo 您的意思是更改在 AnagraficaClienti 中使用 OneToMany 注释创建与 WorkOrder 的关系吗?请用代码做一个例子吗
-
请看下面我的回答