很简单啊,在你的PaperSubject里分别给Paper和Subject都设置ManyToOne,单向关联就够了,查询的时候这样:
select subject from PaperSubject ps where ps.paper.paparid=?
你这样就查出了所有指定的subject 对象

解决方案 »

  1.   

    不是多对多吗?为什么用manytoone?
      

  2.   


    Paper类:
    package com.donald.entity;import java.util.HashSet;
    import java.util.Set;import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    @Entity
    public class Paper { private Integer id;
    private String name;
    private Set<Subject> subjects = new HashSet<Subject>();

    @GeneratedValue
    @Id
    public Integer getId() {
    return id;
    }
    public void setId(Integer id) {
    this.id = id;
    }

    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name="pater_subject",
    joinColumns={@JoinColumn(name="paperId")},
    inverseJoinColumns={@JoinColumn(name="subjectId")}
    )
    public Set<Subject> getSubjects() {
    return subjects;
    }
    public void setSubjects(Set<Subject> subjects) {
    this.subjects = subjects;
    }
    }
    Subject类:
    package com.donald.entity;import java.util.HashSet;
    import java.util.Set;import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.ManyToMany;@Entity
    public class Subject { private Integer id;
    private String name;
    private Set<Paper> papers = new HashSet<Paper>();

    @GeneratedValue
    @Id
    public Integer getId() {
    return id;
    }
    public void setId(Integer id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    @ManyToMany(mappedBy="subjects")
    public Set<Paper> getPapers() {
    return papers;
    }
    public void setPapers(Set<Paper> papers) {
    this.papers = papers;
    }
    }
    测试代码:
    Session session = factory.openSession();
    Paper p = (Paper)session.get(Paper.class, 1);
    System.out.println(p.getSubjects());这样通过Paper的id号去查Paper对象,从Paper对象中取出Subject列表就可以了。