2011-02-18 90 views
0

我有3代表大学(ID,姓名),组(ID,姓名,university_id),学生(ID,姓名,编号,GROUP_ID)。 一所大学有许多团体和一组有许多学生。Hibernate的多对一​​和一对多我一个实体

我的POJO是这样的:

@Entity(name = "Student") 
public class Student { 
    @SequenceGenerator(name = "genStudent",sequenceName = "STUDENTSEQ") 
    @Id 
    @GeneratedValue(generator = "genStudent") 
    private int id; 
    @Column(name = "name") 
    private String name; 
    @Column(name = "facNum") 
    private String facNum; 
    @ManyToOne 
    private UniGroup group; 

    public UniGroup getGroup() { 
     return group; 
    } 

    public void setGroup(UniGroup group) { 
     this.group = group; 
    } 

    public Student(){ 
    } 
... getters and setters 
} 

@Entity 
public class UniGroup { 
    @SequenceGenerator(name = "genGroup",sequenceName = "UNIGROUPSEQ") 
    @Id 
    @GeneratedValue(generator = "genGroup") 
    private int id; 
    @Column(name = "administrativeName") 
    private String administrativeName; 
    @OneToMany(mappedBy = "group",cascade=CascadeType.ALL) 
    private List<Student> students; 
    @ManyToOne 
    private University university; 
... getters and setters 
} 

@Entity 
public class University { 
    @SequenceGenerator(name = "genUniversity",sequenceName = "UNIVERSITYSEQ") 
    @Id 
    @GeneratedValue(generator = "genUniversity") 
    private int id; 
    @Column(name = "name") 
    private String name; 
    @OneToMany(mappedBy = "university",cascade=CascadeType.ALL) 
    private List<UniGroup> groups; 

    public University(){ 
     groups = new ArrayList<UniGroup>(); 
    } 

我的助手类:

public class StudentSystemUtil { 
    private SessionFactory sessFac; 

    public StudentSystemUtil(){ 
     sessFac = new Configuration().configure().buildSessionFactory(); 
    } 

    @SuppressWarnings("unchecked") 
    public void showGroups(){ 
     Session session = sessFac.getCurrentSession(); 

     try{ 
     session.beginTransaction(); 

     Query q = session.createQuery("from UniGroup"); 

     List<UniGroup> groups = (List<UniGroup>)q.list(); 

     for(UniGroup g:groups){ 
      System.out.println("Group: "+g.getId()+" "+g.getAdministrativeName()); 
      for(Student s:g.getStudents()){ 
       System.out.println(s.getName()+" "+s.getGroup().getAdministrativeName()); 
      } 
     } 
     session.getTransaction().commit(); 
     }catch(Exception e){ 
      System.out.println("Error: "+e.getMessage()); 
     } 
    } 

    public void saveGroup(UniGroup group){ 
     Session session = sessFac.getCurrentSession(); 
     try{ 
     session.beginTransaction(); 

     session.save(group); 

     session.getTransaction().commit(); 
     }catch(Exception e){ 
      if(session.getTransaction() != null){ 
       session.getTransaction().rollback(); 
      } 
      System.out.println("Error: "+e.getMessage()); 
     } 
    } 

    @SuppressWarnings("unchecked") 
    public void showUniversityes(){ 
     Session session = sessFac.getCurrentSession(); 

     try{ 
     session.beginTransaction(); 

     Query q = session.createQuery("from University"); 

     List<University> universityes = (List<University>)q.list(); 

     for(University u:universityes){ 
      System.out.println("University: "+u.getId()+" "+u.getName()); 
      for(UniGroup g:u.getGroups()){ 
       System.out.println(g.getAdministrativeName()); 
       for(Student s:g.getStudents()){ 
        System.out.println("Student "+s.getName()); 
       } 
      } 
     } 
     session.getTransaction().commit(); 
     }catch(Exception e){ 
      System.out.println("Error: "+e.getMessage()); 
     } 
    } 

    public void saveUniversity(University uni){ 
     Session session = sessFac.getCurrentSession(); 
     try{ 
     session.beginTransaction(); 

     session.save(uni); 

     session.getTransaction().commit(); 
     }catch(Exception e){ 
      if(session.getTransaction() != null){ 
       session.getTransaction().rollback(); 
      } 
      System.out.println("Error: "+e.getMessage()); 
     } 
    } 

    public void closeSessionFactory(){ 
     sessFac.close(); 
    } 

} 

,我得到

Error: Could not execute JDBC batch update 
Error: could not execute query 

当尝试保存或展示一些东西。请帮助。

回答

3

您应该做的第一件事是添加@JoinColumn注释,其中应用了@ManyToOne,否则将应用默认值。 @JoinColumn具有指定列数据库用于关系参数名称。 看一看documentation更多信息

+0

考虑投票,如果你发现它有用 – anergy 2011-02-19 23:17:01