
java框架hibernate多对多如何进行关联查询 100
比如我有学生表课程表和中间表三个表对应的实体类(不必要的信息就省略了)publicclassStudent{privateintid;privateStringname;...
比如我有学生表 课程表 和中间表三个表 对应的实体类(不必要的信息就省略了)
public class Student{
private int id;
private String name;
@Id
public int getId(){
}
//其他省略
}
}
public class Course{
private int id;
private String name;
@Id
public int getId(){
}
//其他省略
}
中间表
public class StudentCourse{
private int id;
private Student s;
private Course c;
@Id
public int getId(){
}
@ManyToOne
public Student getS(){
}
@ManyToOne
public Course getC(){
}
}
现在要查询的是student类的id,name以及一个student选了什么course?怎么写hql语句?
返回值尽量是List<Student>
关联的course id和name也要查出来
实体类结构就这样了 没法改了
我写的hql是“select s from Student s join s.scs”
这样写的hql解析的sql放数据库里能查出正确的记录 但是这样的hql却只能得到第一条记录 这是怎么回事? 展开
public class Student{
private int id;
private String name;
@Id
public int getId(){
}
//其他省略
}
}
public class Course{
private int id;
private String name;
@Id
public int getId(){
}
//其他省略
}
中间表
public class StudentCourse{
private int id;
private Student s;
private Course c;
@Id
public int getId(){
}
@ManyToOne
public Student getS(){
}
@ManyToOne
public Course getC(){
}
}
现在要查询的是student类的id,name以及一个student选了什么course?怎么写hql语句?
返回值尽量是List<Student>
关联的course id和name也要查出来
实体类结构就这样了 没法改了
我写的hql是“select s from Student s join s.scs”
这样写的hql解析的sql放数据库里能查出正确的记录 但是这样的hql却只能得到第一条记录 这是怎么回事? 展开
展开全部
多对多需要一个关联表,你用的是注解,你可以在多的一方的另一方引用的list上面,
比如用户和角色,他们是多对多的关系,你可以写上:
/**User表中的其他的属性*/
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToMany()
@JoinTable(name = "TB_USER_ROLE", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
private List<Role> roles;
这样就在数据库中创建了TB_USER_ROLE这个关联表,
然后在ROLE这个实体类中也要配置一个多对多的关系。如下:
// 对应关联的用户集合
@ManyToMany(mappedBy = "roles")
private List<User> users;
这样就可以啦,
比如用户和角色,他们是多对多的关系,你可以写上:
/**User表中的其他的属性*/
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToMany()
@JoinTable(name = "TB_USER_ROLE", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
private List<Role> roles;
这样就在数据库中创建了TB_USER_ROLE这个关联表,
然后在ROLE这个实体类中也要配置一个多对多的关系。如下:
// 对应关联的用户集合
@ManyToMany(mappedBy = "roles")
private List<User> users;
这样就可以啦,
展开全部
多对多需要一个关联表,你用的是注解,你可以在多的一方的另一方引用的list上面,
比如用户和角色,他们是多对多的关系,你可以写上:
/**User表中的其他的属性*/
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToMany()
@JoinTable(name = "TB_USER_ROLE", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
private List<Role> roles;
这样就在数据库中创建了TB_USER_ROLE这个关联表,
然后在ROLE这个实体类中也要配置一个多对多的关系。如下:
// 对应关联的用户集合
@ManyToMany(mappedBy = "roles")
private List<User> users;
这样就可以啦,
比如用户和角色,他们是多对多的关系,你可以写上:
/**User表中的其他的属性*/
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToMany()
@JoinTable(name = "TB_USER_ROLE", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
private List<Role> roles;
这样就在数据库中创建了TB_USER_ROLE这个关联表,
然后在ROLE这个实体类中也要配置一个多对多的关系。如下:
// 对应关联的用户集合
@ManyToMany(mappedBy = "roles")
private List<User> users;
这样就可以啦,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询