[英]JPA Cascading Delete: Setting child FK to NULL on a NOT NULL column
[英]Merge with JPA not setting FK id
我有兩個表,它們的關系由2列組成,我的第一個實體是:
public class NfCabeca implements java.io.Serializable {
@Id
@SequenceGenerator(name = "nf_cabeca_sequencial_seq", sequenceName = "nf_cabeca_sequencial_seq", schema = "mobile", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "nf_cabeca_sequencial_seq")
@Column(name = "sequencial", insertable = false, updatable = false)
private long sequencial;
@ManyToOne
@NotFound(action=NotFoundAction.IGNORE)
@MapsId("nf_cabeca_id")
@JoinColumns({
@JoinColumn(name = "sequencial" , referencedColumnName="nf_cabeca"),
@JoinColumn(name= "protocolo", referencedColumnName="protocolo")})
private NFeProtocolo protocolo;
@OneToMany(mappedBy = "nf_cabeca_id", cascade = CascadeType.ALL)
private List<NFeProtocolo> protocolos = new ArrayList<NFeProtocolo>();
public void setProtocolo(NFeProtocolo protocolo) {
this.protocolo = protocolo;
protocolos.remove(protocolo);
protocolo.setNf_cabeca_id(this);
protocolos.add(protocolo);
}
}
我的第二個實體是:
public class NFeProtocolo implements Serializable {
/**
*
*/
private static final long serialVersionUID = 2092981840170296102L;
@Id
@ManyToOne
@JoinColumn(name = "nf_cabeca" , referencedColumnName="sequencial", updatable = false)
private NfCabeca nf_cabeca_id;
@Id
@Column(name = "protocolo", length = 100)
private String protocolo;
@Column(name = "operacao", length = 15, nullable = false)
@Enumerated(EnumType.STRING)
private NFeProtocoloOperacao operacao;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "data_hora", length = 29, nullable = false)
private Date dataHora;
@Column(name = "status", length = 10)
private String status;
}
問題是當我在NFeProtocolo
設置NFCabeca
NFeProtocolo nFeProtocolo = new NFeProtocolo(protocolo, operacao, dataProtocolo, status);
nFeProtocolo.setNf_cabeca_id(nf);
nf.setProtocolo(nFeProtocolo);
merge(nf);
我得到一個錯誤:
錯誤消息,提示列nf_cabeca不能設置為null
確實不能,但是在設置nf_cabeca
值時我做錯了什么? 監視對象nFeProtocolo時,它沒有暴露nf_cabeca_id。
協議內容:
[NFeProtocolo [protocolo = 333170000339533,Operacao = CRIACAO,dataHora = BRT Aug 3 09:19:11 BRT 2017,status = 100]]
為什么不將nf_nf_cabeca_id設置在外面?
解決方案是創建一個
public void setProtocolos(List<NFeProtocolo> protocolos) {
this.protocolos = protocolos;
}
在NfCabeca上,將NfeProtocolo上的nf_cabeca_id更改為
@ManyToOne
@JoinColumn(name = "nf_cabeca")
private NfCabeca nf_cabeca_id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.