2011-02-18 7 views
0

3 개의 테이블이 있습니다. (ID, 이름), 그룹 (ID, 이름, 대학 ID), 학생 (ID, 이름, 번호, 그룹 ID). 한 대학에는 많은 그룹이 있고 한 그룹에는 많은 학생이 있습니다.최대 절전 모드 ManyToOne과 OneToMany i 하나의 엔티티

내 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

@ManyToOne이 적용되는 곳에서 @JoinColumn 주석을 추가해야합니다. 그렇지 않으면 기본값이 적용될 것이기 때문입니다. @JoinColumn에는 데이터베이스에서 관계에 사용되는 열을 지정하는 매개 변수 이름이 있습니다. 자세한 내용은 documentation을 보시길 바랍니다

+0

유용한 정보를 찾으면 투표를 올리십시오. – anergy

+0

@JoinColumn을해야한다는 것을 깨달았을 때이 게시물까지 오랫동안 여기에 머물러 있습니다. 내 개체 필드, 데이터베이스 필드 쿼리 작업을 만들기 위해 이름을 바꾸려고 ... 그래서 바보 야. – heroix