したがって、私は次の2つのクラスで作業しています。
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING, length = 1)
@Table(name = "calibracao", catalog = "aquitel", schema = "")
@XmlRootElement
public abstract class Calibracao implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idCalibracao")
private Long idCalibracao;
@Basic(optional = false)
@Column(name = "type")
private String type;
@Basic(optional = false)
@Column(name = "adc")
private int adc;
@Basic(optional = false)
@Column(name = "voltagem")
private float voltagem;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "calibracao")
private CalibracaoPoco calibracaoPoco;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "calibracao")
private CalibracaoRepetidor calibracaoRepetidor;
@JoinColumn(name = "parametroStatus", referencedColumnName = "idParametro_Status")
@ManyToOne(optional = false)
private ParametroStatus parametroStatus;
//Getters and setters
}
そして
@Entity
@Table(name = "parametro_status", catalog = "aquitel", schema = "")
@XmlRootElement
public class ParametroStatus implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idParametro_Status")
private Integer idParametroStatus;
@Basic(optional = false)
@Column(name = "nome")
private String nome;
@Column(name = "unidadeMedida")
private String unidadeMedida;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "parametro")
private List<Status> statusList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "parametroStatus")
private List<Calibracao> calibracaoList;
//Getters and setters
}
エンティティオブジェクトは、次のコードを使用してインスタンス化されます。
public class AdcCalibratior extends javax.swing.JFrame {
List<Calibracao> points;
public AdcCalibrator(){
//Unrelated code ...
points = getCalibration(selectedNode, selectedParameter);
}
//Unrelated code ...
private List<Calibracao> getCalibration(Object node, ParametroStatus parameter) {
if (node instanceof Poco) {
TypedQuery query = em.createNamedQuery("CalibracaoPoco.findByParametro", CalibracaoPoco.class);
query.setParameter("poco", (Poco) node);
query.setParameter("parametro", parameter);
return query.getResultList();
} else {
TypedQuery query = em.createNamedQuery("CalibracaoRepetidor.findByParametro", CalibracaoRepetidor.class);
query.setParameter("repetidor", (Repetidor) node);
query.setParameter("parametro", parameter);
return query.getResultList();
}
}
//More unrelated code ...
}
私はのインスタンスを削除しようとするとCalibracao
使用してEntityManager.remove(calibracao)
、私は次のエラーを取得します:
[EL Warning]: 2014-02-15 22:49:43.27--UnitOfWork(2118956727)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'parametroStatus' cannot be null
Error Code: 1048
Call: UPDATE aquitel.calibracao SET parametroStatus = ? WHERE (idCalibracao = ?)
bind => [2 parameters bound]
Query: DeleteObjectQuery(unesp.lebac.aquitel.dataLink.enitity.CalibracaoPoco[ idCalibracao=6 ])
なぜこれが起こるのか誰かが知っていますか?
これを行うことを検討してください:
参照をnullに設定すると問題が解決する可能性があります。奇妙なのは、エンティティを削除しようとしたときに表示されるupdateステートメントだけです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加