Java [1241]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • naim

    Cześć, mam taki problem - robie sobie Encje (POJO) i chce ją wrzucic do bazy ale nic sie nie insertuje, DDL sie wykonuje natomiast zaden DML juz nie - moze wy bedziecie wiedziec co jest nie tak?


    persistence.xml
    ------------------------------ --
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0"
    xmlns=" http://java.sun.com/xml/ns/per sistence" xmlns:xsi=" http://www.w3.org/2001/XMLSche ma-instance"
    xsi:schemaLocation=" http://java.sun.com/xml/ns/persiste... http://java.sun.com/xml/ns/per sistence/persistence_1_0.xsd">
    <persistence-unit name="ExamLocalPU" transaction-type="RESOURCE_LOC AL">
    <!-- <provider>org.hibernate.ejb.Hi bernatePersistence</provider> -->
    <properties>
    <property name="hibernate.archive.autode tection" value="class"/ >
    <property name="hibernate.show_sql" value="true"/ >
    <property name="hibernate.format_sql" value="true"/>
    <property name="hibernate.generate_stati stics" value="true"/>
    <property name="hibernate.cache.use_quer y_cache" value="false"/>
    <property name="hibernate.cache.use_seco nd_level_cache" value="false"/>
    <property name="hibernate.connection.dri ver_class" value="com.mysql.jdbc.Driver"/ >
    <property name="hibernate.connection.url " value="jdbc:mysql://localhost: 3306/exam"/ >
    <property name="hibernate.connection.use rname" value="root"/ >
    <property name="hibernate.connection.pas sword" value=""/ >
    <property name="hibernate.dialect" value="org.hibernate.dialect.M ySQLDialect"/ >
    <property name="hibernate.hbm2ddl.auto" value="update"/ >
    <property name="hibernate.connection.aut ocommit" value="true"/ >
    </properties>
    </persistence-unit>
    </persistence>


    Klasa encji
    ------------------------
    @Entity
    public class Student {

    @Id
    @GeneratedValue
    private Long id;
    private String pesel;
    private String firstname;
    private String lastname;

    public Student(){}

    //settery i gettery

    }

    Klasa testowa
    ----------------------------
    public class HibernateTest {

    public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManage rFactory("ExamLocalPU");
    EntityManager em = emf.createEntityManager();
    Student student = new Student();
    student.setFirstname("Piotr");
    student.setLastname("Szulawski ");
    student.setPesel("12345678901" );
    em.persist(student);
    }
    }


    W logu nie mam zadnych bledow, widze wyraznie ze ddl sie tworzy i w bazie pojawia sie struktura
  • Koziołek [brat Javowiec]

    Sprawdź czy masz ustawione autocommit na true. Generalnie tranzakcje zatwierdzać należy ręcznie.
  • naim

    <property name="hibernate.connection.aut ocommit" value="true"/ >

    Mam:)
    Wlasnie nie chcialem sie bawic w reczne zatwierdzanie transakcji - wolalem to oddelegowac do hibernate



    //EDIT

    Jednak po dodaniu transakcji dziala:)
    Dzieki za rade!

    Rozwiazanie:

    public class HibernateTest {

    public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManage rFactory("ExamLocalPU");
    EntityManager em = emf.createEntityManager();
    EntityTransaction transaction = em.getTransaction();
    transaction.begin();
    Student student = new Student();
    student.setFirstname("Piotr");
    student.setLastname("Szulawski ");
    student.setPesel("SOMEPESEL");
    em.persist(student);
    transaction.commit();
    em.close();
    emf.close();
    }
    }
  • the_javu

    Co prawdopodobnie oznacza, że bez transakcji należało stosować em.flush().
  • naim

    Si,

    problem z propertiesem z persistence.xml okazał się trywialny - aplikacja standalone nie zdeployowana na serwerze nie ma transakcji obslugiwanych tak przez properties. po deployu na serwer dziala poprawnie:)
  • Toples

    wybaczcie, że się podłącze do tematu, ale nie korzystam z grona, a już na pewno nie do takich problemów; ], a że padł temat hibernate'a to może akurat ktoś wie i pomoże...

    mianowicie mi się insertuje fajnie tylko dane zapisują się do nieodpowiednich kolumn... jakiś pomysł czemu?

    inserta wykonuję przez procedurę składowaną w sposób następujący:

    @SQLInsert(callable= true, sql="{CALL RecordEventErrorCounters(?,?,? ,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ,?,?,?,?,?,?,?,?,?,?)}")

    dodatkowo przy każdym getterze zmiennej POJO mam adnotację:

    @Column(name = "nazwa_kolumny")

    Nazwy na pewno są dobrze bo zostały wygenerowane, z resztą dla pewności sprawdziłem.
    Może ktoś miał podobną sytuację? Domyślam się, że problem powstał dlatego, że insertuję przez stored procedure (więc adnotacja @column tutaj nie pomoże). Po przedebugowaniu widać, że układa zmienne alfabetycznie do swojej tablicy fields i z niej przepisuje te wartości argumentom procedury. Teraz pytanie czy ktoś potrafi przekazywać do procedury składowanej argumenty nazwane? Jest jakiś sposób, aby zamiast znaków zapytania wstawić nazwy zmiennych? Jakoś powiązać je z adnotacjami przy getterach?

    pomóżcie; )
| |

Wszystko co związane z programowaniem w Java (J2EE, JSP, JDBC, itd) test



Fotki

Miejsca grona (1)