user 
id  name dept_id
1   dd   3
2   aa   2dept
dept_id  dept_name
1        zonghebu
2        网络部
3        研发部现在想要的效果是
用户名   部门名称dd       研发部
aa       网络部怎么sql会写,但是怎么用annotation的方式把这两张表关联起来..谢谢 

解决方案 »

  1.   

    两个表是通过主键关联还是外键关联的?
    如果是一对一外键盘关联的话
    private User user;
    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="dept_id",unique=true)
    //一对一外键关联,使用@OneToOne,并设置了级联操作
    //@JoinColum设置了外键的名称为dept_id如果不设置,则默认为id
    //外键的值是唯一的(unique),不可重复,与Heart的主键一直
    public User getUser() {
    return user;
    }
    USER里面也要做一些设置,具体的操作你看一下文档吧~
      

  2.   


    @Entity
    public class Dept {

    private String dept_name ; @OneToMany
    private String dept_id ; @Column(name="dept_name")
    public String getName() {
    return dept_name;
    } public void setName(String name) {
    this.dept_name = name;
    }

    @Column(name = "dept_id")
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public String getDeptId() {
    return dept_id;
    }
    public void setDeptId(String dept_id) {
    this.dept_id = dept_id;
    }

    }@Entity
    public class User {

    private int id ;
    private String name ;
    @ManyToOne
    @JoinColumn(name="dept_id")
    private String dept_id ; @Id
    @GeneratedValue
    public int getId() {
    return id;
    } public void setId(int id) {
    this.id = id;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }

    @Column(name = "dept_id")
    public String getDeptId() {
    return dept_id;
    }
    public void setDeptId(String dept_id) {
    this.dept_id = dept_id;
    }

    }
    两个model这么定义的.
      

  3.   

    方法1:
    首先,自己创建一个javabean(Info).属性有name和dept_name,分别对应的是user表里面的name字段和dept表里面的dept_name字段.
    public class Info implements java.io.Serializable {       private String name;
           private String dept_name;       public Info(){}//构造方法        public Info(String name, String dept_name){//构造方法必须
                 this.name = name;
                 this.dept_name = dept_name;
           }       getter方法...
           setter方法...
    }DAO层通过HQL语句:"select new javabean包名.Info(u.name, d.dept_name) from 实体类包名.User as u, 实体类包名.Dept as d where u.dept_id = d.dept_id"即可返回List<Info>集合.方法2:
    在数据库里面使用SQL语句:
         create view v_userdept
         as
         select u.name, d.dept_name from user u join dept d on u.dept_id = d.dept_id
    创建一个视图v_userdept.
    然后再MyEclipse里面自动生成实体类java文件和hbm.xml映射文件.
    需要注意的是,由于视图里面没有主键,所以将自动生成两个java实体类.分别为VUserdept.java和VUserdeptId.java,其它的步骤和操作表对应的实体类一样,只不过这里要通过VUserdept.java提供的getId()方法间接的操作VUserdeptId.java.
    例如:我们可以在Action里面执行这条语句:
       private VUserdeptBiz vUserdeptBiz;
       List<VUserdept> list = vUserdeptBiz.findInfo();//DAO层有方法findInfo
    DAO层通过HQL语句:
       from 实体类包名.VUserdept
    即可返回List<VUserdept>集合list,再通过循环把list.get(i).getId().name值和list.get(i).getId().dept_name值取出来.个人觉得第一种方法操作简单些.自己动手做一做,就明白了.
      

  4.   

    部门:
    import java.util.HashSet;
    import java.util.Set;import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;@Entity
    @Table(name = "dept")
    public class Department {
        private int id;
        private String name;
        private Set<User> users = new HashSet<User>();    @Id
        @GeneratedValue
        public int getId() {
            return id;
        }    public String getName() {
            return name;
        }    @OneToMany(mappedBy = "department")
        public Set<User> getUsers() {
            return users;
        }    public void setId(int id) {
            this.id = id;
        }    public void setName(String name) {
            this.name = name;
        }    public void setUsers(Set<User> users) {
            this.users = users;
        }
    }
    用户:
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;@Entity
    public class User {
        private int id;
        private String name;
        private Department department;    @Id
        @GeneratedValue
        public int getId() {
            return id;
        }    public String getName() {
            return name;
        }    @ManyToOne
        @JoinColumn(name = "dept_id")
        public Department getDepartment() {
            return department;
        }    public void setId(int id) {
            this.id = id;
        }    public void setName(String name) {
            this.name = name;
        }    public void setDepartment(Department department) {
            this.department = department;
        }
    }       Table: dept
    CREATE TABLE `dept` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    )       Table: user
    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      `dept_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `FK285FEBE047F90` (`dept_id`),
      CONSTRAINT `FK285FEBE047F90` FOREIGN KEY (`dept_id`) REFERENCES `dept` (`id`)
    )
    这是一个一对多(多对一)双向关联,你应该把你所建的表结构放到贴子里