ParametrosEntity、NomFicherosEntity、TipoCamposEntity の 3 つの関連クラスがあります。問題は、ParametrosEntity オブジェクトを永続化し、他の 2 つの必要なオブジェクトを提供しようとしたときに発生します。
パラメータエンティティ:
@Entity
@Table(name = "CON_DPARAMETROS")
public class ParametrosEntity {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "componenteId", column = @Column(name = "COM_IDENTIFICADOR",
nullable = false)),
@AttributeOverride(name = "clave", column = @Column(name = "PAR_CLAVE",
nullable = false)),
@AttributeOverride(name = "fichero", column = @Column(name = "NOM_FICHERO",
nullable = false))})
private ParametrosPK id;
@Column(name = "PAR_VALOR")
private String valor;
@Column(name = "PAR_LABEL")
private String label;
@Column(name = "PAR_DESCRIPCION")
private String descripcion;
@Column(name = "PAR_PRESENTACION")
private String presentacion;
@Column(name = "PAR_PROGRAMA")
private String programa;
@OneToOne
@JoinColumns({
@JoinColumn(name = "COM_IDENTIFICADOR", referencedColumnName = "COM_IDENTIFICADOR",
nullable = false, insertable = false, updatable = false),
@JoinColumn(name = "NOM_FICHERO", referencedColumnName = "NOM_FICHERO",
nullable = false, insertable = false, updatable = false)})
private NombreFicherosEntity fichero;
@OneToOne
@JoinColumn(name = "TIP_TIPO", nullable = false, insertable = false, updatable = false)
private TipoCamposEntity tipo;
TipoCamposEntity:
@Entity
@Table(name = "CON_PTIPOCAMPOS")
public class TipoCamposEntity {
@Id
@Column(name = "TIP_TIPO")
private String tipo;
@Column(name = "TIP_DESCRIPCION")
private String descripcion;
NomFicherosEntity:
@Entity
@Table(name = "CON_DNOMFICHEROS")
public class NombreFicherosEntity {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "idComponente", column = @Column(name = "COM_IDENTIFICADOR",
nullable = false)),
@AttributeOverride(name = "fichero", column = @Column(name = "NOM_FICHERO",
nullable = false))})
private NombreFicherosPK id;
@OneToOne
@JoinColumn(name = "COM_IDENTIFICADOR", nullable = false, insertable = false, updatable = false)
private ComponentesEntity componente;
ParametrosEntity オブジェクトを永続化しようとすると問題が発生します。必要なエンティティを含むデータをオブジェクト ParametrosEntity に割り当てますが、挿入するとエラーが発生します。
永続化に使用するコードと取得したエラーは次のとおりです。
持続コード:
ParametrosEntity param = new ParametrosEntity();
Session session = HibernateUtil.getSession();
Transaction tx = null;
tx = session.beginTransaction();
ParametrosPK paramPK = new ParametrosPK();
paramPK.setClave("clave");
paramPK.setComponenteId("SGACAC");
paramPK.setFichero("sgacac");
param.setId(paramPK);
param.setDescripcion("dfasfasfadfaf");
param.setLabel("label");
param.setFichero(buscarNomPorIdyNombre("SGACAC", "sgacac")); // This obtain an existing NombreFicherosEntity from the DB
param.setTipo(buscarTipoPorTipo("Texto")); // This obtains an existing TipoCamposEntity from the DB
session.save(param);
tx.commit();
session.close();
そしてエラーのある出力:
Hibernate: insert into CON_DPARAMETROS (PAR_DESCRIPCION, PAR_LABEL, PAR_PRESENTACION, PAR_PROGRAMA, PAR_VALOR, PAR_CLAVE, COM_IDENTIFICADOR, NOM_FICHERO) values (?, ?, ?, ?, ?, ?, ?, ?)
ORA-01400: cannot insert NULL into ("SGAINSDIST"."CON_DPARAMETROS"."TIP_TIPO")
休止状態が挿入クエリに列「TIP_TIPO」を含めていないことがわかりますが、なぜそうでないのか理解できません。ここで私が間違っていることは何ですか? 助けてくれてありがとう。