Hibernate - PropertyValueException e mapeamento com annotations

Olá,

Tenho algumas entidades que se relacionam por 1:N e N:1. Quando vou salvar no banco de dados, o Hibernate lança a seguinte exceção:

org.hibernate.PropertyValueException: not-null property references a null or transient value: com.modelo.beans.Verbete._verbetesBackref

Procurei em fóruns e disseram que tem a ver com uma incompatibilidade entre as definições de NOT NULL do banco com relação aos atributos nullable das anotações, porém não consegui encontrar tais inconsistências. Por isso, aqui vão minhas classes e a parte da implementação do banco relacionada ao problema.

Verbete

@Entity
@Table(name="verbete")
public class Verbete implements Serializable{
    private long id;
    private Set<NomesVerbete> nomes = new HashSet<NomesVerbete>();
    private Set<SignificadosVerbete> significados = new HashSet<SignificadosVerbete>();
    private String etimologia;
    private int totalAcessos;
    private CategoriaVerbete categoria;
    private Usuario autor;
    private Date dataLancamento;
    private int relevancia;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="verb_id")
    public long getId(){
        return id;
    }
    public void setId(long id){
        this.id = id;
    }
    
    @Column(name="verb_etimologia")
    public String getEtimologia() {
        return etimologia;
    }
    public void setEtimologia(String etimologia) {
        this.etimologia = etimologia;
    }
    
    @Column(name="verb_totalAcessos")
    public int getTotalAcessos() {
        return totalAcessos;
    }
    public void setTotalAcessos(int totalAcessos) {
        this.totalAcessos = totalAcessos;
    }
    
    @ManyToOne
    @JoinColumn(name="catVerb_id", insertable = false, updatable = false)
    public CategoriaVerbete getCategoria() {
        return categoria;
    }
    public void setCategoria(CategoriaVerbete categoria) {
        this.categoria = categoria;
    }
    
    @Column(name="verb_dataLancamento")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getDataLancamento() {
        return dataLancamento;
    }
    public void setDataLancamento(Date dataLancamento) {
        this.dataLancamento = dataLancamento;
    }

    @ManyToOne//(cascade = CascadeType.ALL)
    @JoinColumn(name="user_id", insertable = false, updatable = false)
    public Usuario getAutor() {
        return autor;
    }
    public void setAutor(Usuario autor) {
        this.autor = autor;
    }

    @Column(name="verb_relevancia")
    public int getRelevancia() {
        return relevancia;
    }
    public void setRelevancia(int relevancia) {
        this.relevancia = relevancia;
    }

    @OneToMany(fetch = FetchType.LAZY,cascade={CascadeType.ALL})
    @JoinColumn(name="verb_id", nullable = false)
    public Set<NomesVerbete> getNomes() {
        return nomes;
    }
    public void setNomes(Set<NomesVerbete> nomes) {
        this.nomes = nomes;
    }

    @OneToMany(fetch = FetchType.LAZY,cascade={CascadeType.ALL})
    @JoinColumn(name="verb_id", nullable = false)
    public Set<SignificadosVerbete> getSignificados() {
        return significados;
    }
    public void setSignificados(Set<SignificadosVerbete> significados) {
        this.significados = significados;
    }
}

SignificadosVerbete

@Entity
@Table(name="verbete_significados")
public class SignificadosVerbete {
    private long id;
    private String significado;
    private CategoriaVerbete categoria;
    private Verbete verbete;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="sigVerb_id")
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    @Column(name="sigVerb_significado")
    public String getSignificado() {
        return significado;
    }
    public void setSignificado(String significado) {
        this.significado = significado;
    }

    @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;
    }

    @ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name="verb_id", insertable = false, updatable = false)
    public Verbete getVerbete() {
        return verbete;
    }
    public void setVerbete(Verbete verbete) {
        this.verbete = verbete;
    }
    
}

NomesVerbete

@Entity
@Table(name="verbete_nomes")
public class NomesVerbete implements Serializable {
    private long id;
    private String nome;
    private Verbete verbete;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="nomeVerb_id")
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    @Column(name="nomeVerb_nome", unique=true)
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }

    @ManyToOne
    @JoinColumn(name="verb_id", insertable = false, updatable = false)
    public Verbete getVerbete() {
        return verbete;
    }
    public void setVerbete(Verbete verbete) {
        this.verbete = verbete;
    }
}

No banco de dados…

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
);

CREATE TABLE verbete (
verb_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
verb_etimologia TINYTEXT NOT NULL,
verb_dataLancamento DATETIME NOT NULL,
verb_totalAcessos INT DEFAULT 0,
verb_relevancia INT DEFAULT 5,
catVerb_id INT NOT NULL,
user_id INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES usuario(user_id),
FOREIGN KEY (catVerb_id) REFERENCES verbete_categoria(catVerb_id)
);

CREATE TABLE verbete_nomes (
nomeVerb_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
verb_id INT NOT NULL,
nomeVerb_nome VARCHAR(100) NOT NULL UNIQUE,
FOREIGN KEY (verb_id) REFERENCES verbete(verb_id)
);

CREATE TABLE verbete_significados (
verb_id INT NOT NULL,
sigVerb_significado LONGTEXT NOT NULL,
catVerb_id INT NOT NULL,
FOREIGN KEY (verb_id) REFERENCES verbete(verb_id),
FOREIGN KEY (catVerb_id) REFERENCES verbete_categoria(catVerb_id)
);

Desculpa se o tópico ficou grande demais…

Se for necessário o arquivo de testes, avisem, por favor.

Agradeço toda ajuda desde já.