Hibernate sta gettando la seguente eccezione:(Hibernate) java.sql.SQLException: Il campo 'xxxx' non ha un valore predefinito
Caused by: java.sql.SQLException: Field 'catVerb_id' doesn't have a default value
La gente dice che il problema è con i miei PK che non hanno l'istruzione AUTO_INCREMENT, tuttavia puoi vedere che ho fatto questo nel mio database e il problema continua. Quindi, ho portato le mie classi e le mie implementazioni di database.
Penso che il mio problema sia con la classe di test ... Qualcuno potrebbe mostrarmi come faccio a testarlo?
(Sì, alcune parole sono in portoghese, ma puoi capire).
CategoriaVerbete
@Entity
@Table(name="verbete_categoria")
public class CategoriaVerbete implements Serializable{
private long id;
private String nome;
private String descricao;
private int serie;
private Set<Verbete> verbetes = new HashSet<Verbete>();
private Set<SignificadosVerbete> significados = new HashSet<SignificadosVerbete>();
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="catVerb_id")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
...
@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name="catVerb_id", nullable = true)
public Set<Verbete> getVerbetes() {
return verbetes;
}
public void setVerbetes(Set<Verbete> verbetes) {
this.verbetes = verbetes;
}
@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name="catVerb_id", nullable = true)
public Set<SignificadosVerbete> getSignificados() {
return significados;
}
public void setSignificados(Set<SignificadosVerbete> significados) {
this.significados = significados;
}
}
Verbete
@Entity
@Table(name="verbete")
public class Verbete implements Serializable{
...
@ManyToOne
@JoinColumn(name="catVerb_id", insertable = false, updatable = false)
public CategoriaVerbete getCategoria() {
return categoria;
}
public void setCategoria(CategoriaVerbete categoria) {
this.categoria = categoria;
}
...
}
SignificadosVerbete
@Entity
@Table(name="verbete_significados")
public class SignificadosVerbete {
...
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="catVerb_id", insertable = false, updatable = false)
public CategoriaVerbete getCategoria() {
return categoria;
}
public void setCategoria(CategoriaVerbete categoria) {
this.categoria = categoria;
}
...
}
Nel database ...
CREATE TABLE verbete_categoria (
catVerb_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
catVerb_nome VARCHAR(100) UNIQUE,
catVerb_descricao MEDIUMTEXT,
catVerb_serie INT NOT NULL
);
Qualsiasi aiuto sarà apprezzato, grazie.
AGGIORNAMENTO - PROBLEMA RISOLTO
Beh, mi aspettavo una colonna sonora trionfante, ma è ok ...
ho solo seguito quello che dice questo link:
Ho letto che ciò che è in quel collegamento non è raccomandato dalla documentazione di Hibernate, ma ho provato a seguire i consigli e ho passato una settimana a trattare gli errori. Quindi, spero che questo aiuti le altre persone.
E grazie per tutte le risposte.
Dichiarare le annotazioni sul campo id e non nel metodo get. – fmodos
Ma ho letto che possiamo definire annotazioni sui metodi get o sui campi e che non va bene usare entrambi nella stessa classe ... Ho letto male? – vitorgreati
non sono sicuro, ogni riferimento che uso ... è dichiarato sul campo, dove l'hai letto? – fmodos