IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

java.sql.BatchUpdateException: Column 'customerOrderId' cannot be null


Sujet :

JPA Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut java.sql.BatchUpdateException: Column 'customerOrderId' cannot be null
    salut tous le monde,

    Je suis entrain d'implémenter une page admin dont une des fonctionamlités est de supprimer un client.
    Malheureusement je reçois l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    contact3 >> 15:59:51,559 ERROR [JDBCExceptionReporter] Column 'customerOrderId' cannot be null
    contact3 >> 15:59:51,561 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
    org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
            at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
            at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
            at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
            at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:92)
    ......
    Caused by: java.sql.BatchUpdateException: Column 'customerOrderId' cannot be null
            at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1237)
            at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:936)
            at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
            at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
            ... 74 more
    contact3 >> 15:59:51,567 ERROR [SeamPhaseListener] uncaught exception
    java.lang.IllegalStateException: Could not commit transaction
            at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:602)
            at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsAfterPhase(SeamPhaseListener.java:330)
    le backing bean ou j'ai implémenter la méthode de suppressuin client est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void deleteCustomer() {
     
            Long customId = (Long) em.createQuery("select c.customerId from   Customer c where c.customerId =:customerId")
                    .setParameter("customerId", customerId)
                    .getSingleResult();
            Customer custom = (Customer) em.find(Customer.class, customId);
                em.remove(custom);
        }
    ma page .xhtml est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <a4j:outputPanel id="deleteCustomer" rendered="false" binding="#{deleteCustomer}">
                        <h:selectOneMenu id="deleteClients" converter="javax.faces.Long" value="#{customerId}" required="true" rendered="true">
                            <s:selectItems id="deleteCustomers" value="#{customers}" var="cust" label="#{cust.companyName}" itemValue="#{cust.customerId}"
                                        noSelectionLabel="#{messages['selectCustomer']}"/>
                        </h:selectOneMenu><br/>
     
                        <h:commandButton id="delete" type="submit" value="#{messages['deleteCustomer']}" action="#{adminAction.deleteCustomer()}" immediate="true"/>
                        <h:commandButton type="submit" value="#{messages['cancel']}" action="#{adminAction.hideDeleteCustomer()}"/>
                    </a4j:outputPanel>
    je comprend pas l'erreur d'où elle vient pourtant que l'insertion marche nikel. Je vous informe aussi que la req. implémenté au sein de la méthode retourne bien l'objet selectionné dans la page .xhtml

    quelq'un a une idée??
    merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    je vous rajoute la classe Customer qui contient l'attribut CustomerOders
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class Customer {
    .....
    @OneToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
         @JoinColumn(name="ContactId")
         private List<Contact> contacts = new ArrayList<Contact>();
     
        /**  relation with address class 1:1  unidirectional 
         * cascade ALL
         * Fetch EAGER default
         */
        @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        @JoinColumn(name="addressId", nullable = false)
        private Address address;
     
    //    relation with CustomerOrder 1:n bidirectional
     
        @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
        @JoinColumn(name = "CustomerOrderId")
        private List<CustomerOrder> customerOrders = new ArrayList<CustomerOrder>();
    et la class CustomerOrder qui contient l'attribut Customer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class CustomerOrder {
    ....
    //    relation witn Customer n:1 bidirectional
        @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn (name = "customerId")
        private Customer customer;
    ......

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Long customId = (Long) em.createQuery("select c.customerId from Customer c where c.customerId =:customerId")
    .setParameter("customerId", customerId)
    bonjour,

    tu es certain que ceci fonctionne ?
    tu passe en paramètre de ta requête la valeur que tu essai de récupérer par ta requête.

    Edit:

    j'ai rien dit

    autant pour moi j'ai mal lu

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/04/2013, 20h28
  2. Réponses: 4
    Dernier message: 13/11/2010, 18h35
  3. Column 'col' cannot be null
    Par jeyce dans le forum Hibernate
    Réponses: 2
    Dernier message: 02/08/2007, 18h27
  4. BatchUpdateException: Column 'IdT1' cannot be null
    Par MASSAKA dans le forum Hibernate
    Réponses: 13
    Dernier message: 07/06/2007, 19h11
  5. Réponses: 5
    Dernier message: 12/12/2005, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo