7
votes

(Hibernate) java.sql.sqxception: champ 'xxxx' n'a pas de valeur par défaut

hibernate lance l'exception suivante:

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


12 commentaires

Déclarez les annotations sur l'ID de champ et non dans la méthode GET.


Mais j'ai lu que nous pouvons définir des annotations sur les méthodes d'obtention ou sur les champs et ce n'est pas bon à utiliser à la fois dans la même classe ... ai-je lu mal?


Pas sûr, chaque référence que j'utilise ... elle est déclarée sur le terrain, où l'avez-vous lu?


Ceci est un exemple: MKKYONG.HIBERNAIRE/ ... En outre, j'ai une classe mappée de cette façon et ça marche bien ...


@fmodos Ce n'est pas mauvais déclarant sur getters .. Ce n'est pas le problème, avez-vous la requête UED? Au fait, si vous utilisez le jeu, vous devriez remplacer les eaux et les méthodes de code Hashcode


@nachokk, y a-t-il un problème si j'utilise la liste au lieu de définir? Peut-être que cela pourrait-il avoir une relation avec le problème?


Je ne pense pas que U Problème s'appuie sur cela, est un conseil que je vous donne car un ensemble représente un ensemble mathématiquement pour fonctionner correctement, vous devez remplacer les égaux et le hachemethod pour éviter les répétitions de la méthode de l'utilisation définie.


Droite, mais puis-je utiliser la liste au lieu de définir?


Oui tu peux .. la question est de savoir pourquoi tu veux faire ça? Besoin d'un ordre spécifique u peut vouloir permettre des répétitions?


D'accord, maintenant je comprends la différence, merci :)


Le lien avec la solution ne fonctionne pas. (Il a «...» dedans.) Pourriez-vous s'il vous plaît fournir un lien de travail?


Un lien de travail est là :)


4 Réponses :


0
votes

Si vous utilisez la même colonne cattbb_id code> pour @joincolumn code> comme xxx pré>

Essayez de le changer en p>

@JoinColumn(name="catVerb_id", insertable = false, updatable = false) 


3 commentaires

Essayez aussi: @generatedValue (stratégie = générationtype.entity)


Pour OneTomanany utilise OneTomanany (Tarnexity =, mappéby =) au lieu de Joincolumn


J'ai essayé cela aussi, mais rien ne change ... Hé, puis-je mettre le code de test ici? Peut-être que je fais quelque chose de mal ...



3
votes

Je suis d'accord avec le lien fourni. Cela a fonctionné après le lien. Comme j'ai compris, Supprimer la partie ci-dessous travaillait pour moi.

Avant: xxx

après: xxx


2 commentaires

Cela a également travaillé pour moi aussi, je suis curieux de connaître une solution solide pourquoi cela fonctionne. Je vais mettre à jour la réponse avec ce que je vais près de l'avenir


Fait intéressant, avoir insérable = false, mise à jour = false ne semble pas poser de problème avec fetch.lazy ...



6
votes

Je crois que c'est le SimpleDosverbete code> L'insertion causant que le ne peut pas être NULL code> problème (je vous suggère fortement de vous diriger sur SQL Trace pour voir quelle requête provoque des problèmes. ).

Il s'agit d'un problème commun pour les relations bidirectionnelles une à plusieurs. Ce que vous avez, c'est quelque chose comme: p> xxx pré>

Ce type de mappage provoquera la propriété de la relation par foo code>, et cela créera plusieurs Insérer + Mettre à jour CODE> Déclarations: Lorsque vous insérez un foo code>, avec 2 bar code> S, que sera-t-il d'abord insérer que foo code> et 2 bar sans strong> le FK foo_id code>. Ensuite, deux mises à jour seront émises pour chaque barre pour mettre à jour le bon foo_id code> dans la barre code> code> table. P>

normalement nous faisons Pas mapper Bi-Directionnel OneTomanany Code> Caplings de cette façon, nous faisons cela à la place: P>

class Foo {
    @Id
    @Column("foo_id")
    Long id;

    @OneToMany(mappedBy="foo", cascade=ALL)
    Set<Bar> bars;
}

class Bar {
    @Id
    @Column("bar_id")
    Long id;

    @ManyToOne
    @JoinColumn("foo_id")
    Foo foo;
}


5 commentaires

Oups, vient de lire votre mise à jour de ce document, qui semble suggérer ce que je décrivais ici. Ne peut pas lire portugais cependant: p


C'est la réponse qui a résolu le problème pour. Merci beaucoup, Adrian! Je ne savais pas que ces qualificatifs (misée, insérable) affecteraient les opérations. Je suppose que j'ai besoin de m'éduquer profondément comment Hiberante traduit cela aux opérations SQL.


Glad Ça aide (WOW, près de 2 ans.). Envisagez d'accepter la réponse si cela résolvait votre problème.


Je ne suis pas l'op de la question originale cependant :) J'ai trouvé votre réponse lors de la recherche de mon propre problème. J'ai suscité, c'est tout ce que je peux faire :)


@gruszczy lol désolé pour ma bêtises, je pensais que tu es la base de l'opération sur ce que tu as dit: P J'aurais dû vérifier le nom: P désolé de ça



1
votes

java.sql.sqxception: champ 'xxxx' n'a pas de valeur par défaut forte>

(aka. Problème de chargement indirect) em> strong> p>

J'ai couru dans ce problème aujourd'hui. P>

s'est avéré être un couple de problèmes dans ma situation. P>

La première chose que j'ai trouvée devait être corrigée était que la liste en question devait être chargée paresseuse. Et par paresseux chargé, je veux dire que cela doit être accédé à partir de la base de données lorsque la base de données "est en session". Maintenant, il y a un peu d'astuce que j'ai trouvée que vous avez à faire lorsque vous avez affaire à Fetch.lazy, telle que vous devez appeler une méthode sur l'objet référencé lorsque vous le chargez dans le conteneur forte >. Il ne suffit pas de simplement retourner la référence, même à l'intérieur de l'objet de session. P>

Par exemple, au lieu de simplement dire ceci: p>

kids.add(apple);
apple.add(kids);


0 commentaires