user
id name dept_id
1 dd 3
2 aa 2dept
dept_id dept_name
1 zonghebu
2 网络部
3 研发部现在想要的效果是
用户名 部门名称dd 研发部
aa 网络部怎么sql会写,但是怎么用annotation的方式把这两张表关联起来..谢谢
id name dept_id
1 dd 3
2 aa 2dept
dept_id dept_name
1 zonghebu
2 网络部
3 研发部现在想要的效果是
用户名 部门名称dd 研发部
aa 网络部怎么sql会写,但是怎么用annotation的方式把这两张表关联起来..谢谢
解决方案 »
- jQuery或$ 不能识别问题
- 【请教】ibatis 入门级错误 Invalid column name
- 运行servlet,调用this.getServletConfig().getInitParameter("Name"),出现null
- 关于hibernate的po转换vo的问题.
- 上传的问题
- java中将临时表插入到新临时表出的错误 急!急!急!急!急!急!急!
- Hibernate,我疯了
- 谁能帮我解释一下这段程序?#号之间的程序
- 能告诉我做网站上什么时候用JSP,身摸时候用JS,APPLET等?
- 使用数据库连接池遇到Oracle连接不上
- 想在jsp切入一个视频播放器,遇到点问题!!!
- 求助:mybatis 动态建表的问题,要求表名随着月份变动的,在线等
如果是一对一外键盘关联的话
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里面也要做一些设置,具体的操作你看一下文档吧~
@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这么定义的.
首先,自己创建一个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值取出来.个人觉得第一种方法操作简单些.自己动手做一做,就明白了.
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`)
)
这是一个一对多(多对一)双向关联,你应该把你所建的表结构放到贴子里