0

I'm tring to insert data from textfield into database, but my code doesn't work (although there is no errors in console), what am I doing wrong? here is a code:

        Query query = entityManager.createNativeQuery("INSERT INTO Employee(idemployee, name, lastname,"
                + "gender, position, salary, phonenumber, adress) VALUES (:idemployee, :name, :lastname, :gender,"
                + ":position, :salary, :phonenumber, :adress )");

        Employee em = new Employee();

        em.setEID(emplID.getText());
        em.setName(emplName.getText());
        em.setLastName(empllastName.getText());
        em.setGender(emplGender.getText());
        em.setPosition(emplPosition.getText());
        em.setSalary(emplSalary.getText());
        em.setPhonenumber(emplphoneNumber.getText());
        em.setAddress(emplAdress.getText());

        query.setParameter("idemployee", em.getEID());
        query.setParameter("name", em.getEID());
        query.setParameter("lastname", em.getEID());
        query.setParameter("gender", em.getEID());
        query.setParameter("position", em.getEID());
        query.setParameter("salary", em.getEID());
        query.setParameter("phonenumber", em.getEID());
        query.setParameter("adress", em.getEID());

        entityManager.getTransaction().commit();
dante
  • 393
  • 1
  • 15
  • 31
  • 1
    Aren't you missing `query.executeUpdate()`? – James_D Feb 15 '16 at 17:19
  • I added query.executeUpdate() and then another error appears.. ": No value specified for parameter 1" – dante Feb 15 '16 at 17:23
  • I'm not sure native queries support named parameters: I think you have to use positional parameters here. Or use a JPQL update instead of a native SQL one. – James_D Feb 15 '16 at 17:57

1 Answers1

1

The use of named parameters is not defined for native queries. From the JPA specification (section 3.6.3 Named Parameters):

Named parameters follow the rules for identifiers defined in Section 4.4.1. The use of named parameters applies to the Java Persistence query language, and is not defined for native queries. Only positional parameter binding may be portably used for native queries.

So try the following instead:

Query query = entityManager.createNativeQuery("INSERT INTO Employee(idemployee, name, lastname,"
            + "gender, position, salary, phonenumber, adress) VALUES (?1, ?2, ?3, ?4,"
            + "?5, ?6, ?7, ?8 )");

    Employee em = new Employee();

    em.setEID(emplID.getText());
    em.setName(emplName.getText());
    em.setLastName(empllastName.getText());
    em.setGender(emplGender.getText());
    em.setPosition(emplPosition.getText());
    em.setSalary(emplSalary.getText());
    em.setPhonenumber(emplphoneNumber.getText());
    em.setAddress(emplAdress.getText());

    query.setParameter(1, em.getEID());
    query.setParameter(2, em.getEID());
    query.setParameter(3, em.getEID());
    query.setParameter(4, em.getEID());
    query.setParameter(5, em.getEID());
    query.setParameter(6, em.getEID());
    query.setParameter(7, em.getEID());
    query.setParameter(8, em.getEID());

    query.setString("status", "purged");
    int rowsCopied=query.executeUpdate();

    entityManager.getTransaction().commit();

Note that in JPA >= 2.0 you can use named parameters in native queries.

For more information, please follow the JPA/Hibernate Native Queries do not recognize Parameters

Community
  • 1
  • 1
Sudhakar
  • 3,104
  • 2
  • 27
  • 36