解决方案 »

  1.   

    @Entity
    @Table(name = "department")
    public class Department {
    private int id;
    private String departname;
    private Set<Personnel>  set = new HashSet<Personnel>();
    //private Personnel personnel ;

    @Id
    @GeneratedValue
    @Column(name = "ID")
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    @Column(name = "DEPARTNAME")
    public String getDepartname() {
    return departname;
    }
    public void setDepartname(String departname) {
    this.departname = departname;
    } @OneToMany
    @JoinTable(name = "personnel_department" , joinColumns = {@JoinColumn(name = "department_id",referencedColumnName = "id")},inverseJoinColumns = {@JoinColumn(name = "personnel_id",referencedColumnName = "id")})
    //name的值为要建的一张中间表,其中有表department名称加上“_”再加上表personnel名称组成,后边第一个name对应的是中间表列名,对应第一张表的id
    //第二个name也是中间表的另一个列名,对应第二张表的id
    public Set<Personnel> getSet() {
    return set;
    }
    public void setSet(Set<Personnel> set) {
    this.set = set;
    }

    }
    @Entity
    @Table(name = "personnel")
    public class Personnel {
    private int id;
    private String name;
    //private Set<Department> set = new HashSet<Department>();
    private Department department;
    @Id
    @GeneratedValue
    @Column(name = "ID")
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    @Column(name = "P_NAME" , length = 50)
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }

    @ManyToOne
    @JoinTable(name = "personnel_department",joinColumns = {@JoinColumn(name = "personnel_id",referencedColumnName = "id")},inverseJoinColumns={@JoinColumn(name="department_id",referencedColumnName = "id")})
    public Department getDepartment() {
    return department;
    }
    public void setDepartment(Department department) {
    this.department = department;
    }
    }@Repository
    public class UserDaoImpl implements UserDao {
    @Resource
    private SessionFactory sessionFactory; 
    public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
    }
    private Session session;
    public Session getSession() {
    return session = this.sessionFactory.getCurrentSession();
    } @Override
    public void addUser(User user) {
    } @Override
    public void addPersonnel(Personnel personnel) {
    this.getSession().save(personnel);
    this.getSession().save(personnel.getDepartment());
    } @Override
    public void addDepartment(Department department) {
    this.sessionFactory.getCurrentSession().saveOrUpdate(department);

    }

      

  2.   

    如果有中间表的情况请使用ManyToMany的注解方式;参考以下用户与权限关联:User.java
    @ManyToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
    @JoinTable(name = "tr_user_privilege", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "privilege_id"))
    @OrderBy("privilege_id ASC")
    private List<Privilege> privileges;