Я использую 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>
В чем может быть причина?Как их сохранить?