Hibernate rzuca następujący wyjątek:(Hibernate) java.sql.SQLException: Pole „xxxx” nie ma wartości domyślnej
Caused by: java.sql.SQLException: Field 'catVerb_id' doesn't have a default value
Ludzie mówią, że problem jest z moim PK, które nie mają instrukcja AUTO_INCREMENT, jednak widzisz, że zrobiłem to w mojej bazie danych i problem nadal występuje. Więc przyniosłem moje zajęcia i implementacje baz danych.
Myślę, że mój problem dotyczy klasy testowej ... Ktoś może mi pokazać, jak mogę to przetestować?
(Tak, niektóre wyrazy są po portugalsku, ale można je zrozumieć).
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;
}
...
}
W bazie danych ...
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
);
Każda pomoc zostanie doceniona, dziękuję.
AKTUALIZACJA - problem rozwiązany
Cóż, spodziewałem się triumfalnie ścieżkę dźwiękową, ale jest ok ...
Właśnie po co ten link mówi:
Czytałem, że to, co jest w tym łączu, nie jest zalecane w dokumentacji Hibernate, ale starałem się postępować zgodnie z zaleceniami i minął jeden tydzień, traktując błędy. Mam więc nadzieję, że to pomoże innym ludziom.
Dziękuję za wszystkie odpowiedzi.
Zadeklaruj adnotacje nad identyfikatorem pola, a nie w metodzie pobierania. – fmodos
Ale czytałem, że możemy definiować adnotacje nad metodami get lub nad polami i nie jest dobrze używać obu w tej samej klasie ... Czy czytałem źle? – vitorgreati
nie jestem pewien, każde odwołanie, którego używam ... jest zadeklarowane na polu, gdzie go przeczytałeś? – fmodos