Объекты не сохраняются при использовании Hibernate (3.2.5) с PostgreSQL (8.2) - PullRequest
0 голосов
/ 02 декабря 2011

Я использую PostgreSQL (8.2) с Hibernate (3.2.5).Несмотря на правильные аннотации, когда я пытаюсь запустить свой фрагмент кода на бэкэнде, первичные ключи не генерируются, поэтому в итоге запись в таблицу не вставляется.

Я пытаюсь установить One-To-Manyотображение между таблицами классной комнаты (одна сторона) и ученика (много сторон).Пожалуйста, найдите мой фрагмент ниже:

Класс класс

@Entity
public class Classroom implements Serializable {  
    private static final long serialVersionUID = 1L;  

    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)  
    @Column(name="room_id")  
    private Long id;  

    @Column(name="Standard")  
    private String std;  

    @OneToMany(cascade=CascadeType.ALL)  
    @JoinColumn(name="room_id")  
    private Set<Student> students = new HashSet<Student>();  

   // with setters and getters
}

Студент класс

@Entity  
public class Student implements Serializable {  
    private static final long serialVersionUID = 1L; 

    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)  
    @Column(name="roll_no")  
    private Long id;    

    @Column(name="name")  
    private String name; 

   // with setters and getters
}

Main класс

public class Main {

    public static void main(String arr[]){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("OneTomanyMyDbPU");
        EntityManager em = emf.createEntityManager();

        Set<Student> students = new HashSet<Student>();

        Classroom c = new Classroom();

        Student s1 = new Student();
        Student s2 = new Student();

        s1.setName("abc");
        s2.setName("xyz");

        students.add(s1);
        students.add(s2);

        c.setStd("X");
        c.setStudents(students);

        try {
            EntityTransaction tr = em.getTransaction();

            System.out.println("Classroom b4 persisting...:"+c.getStd());
            em.persist(c);

            tr.commit();
        } catch(Exception e){
        }
    }
}

persistence.xml

<persistence-unit name="OneTomanyMyDbPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class> model.Classroom</class>
    <class> model.Student</class>
    <properties>
        <property name="hibernate.connection.username" value="postgres"/>
        <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
        <property name="hibernate.connection.password" value="abc123"/>
        <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/mydb"/>
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>

В чем может быть причина?Как их сохранить?

1 Ответ

1 голос
/ 02 декабря 2011

В вашем hbm-файле указано, что ddl должен быть обновлен, поэтому вы никогда не знаете, создаются ли таблицы каждый раз, поэтому вместо этого:

catch(Exception e){

}

вы можете разместить это:

catch(Exception e){
   e.printStackTrace();
}

и повторить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...