关于hql的inner join问题。帮忙给看下吧

zj978977593 2011-06-25 08:46:25
首先有一个AddressEO和一个StudentEO。关联关系是双向的一对多。一个住址可以有多个学生。
加载为惰性。现在我想通过AddressEO级联查询到StudentEO
这样写

Query query=em.createQuery("from AddressEO a inner join a.studentList where a.id=1");
List list=query.getResultList();


我使用的是jpa

public class AddressEO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String address;
@OneToMany(mappedBy = "address", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<StudentEO> studentList = new ArrayList<StudentEO>();


public class StudentEO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "address_id")
private AddressEO address;

这样返回的list是什么呢。

...全文
571 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zj978977593 2011-06-27
  • 打赏
  • 举报
回复
问题我解决了。是这样的。

et.begin();

String hql="from AddressEO a inner join fetch a.studentList";

List list=em.createQuery(hql).getResultList();

// 提交事务
et.commit();

list返回的是address对象。但是有多个相同的。因为是使用的内连接。查询的结果address一端有重复的结果集。
可以使用hashset将相同的对象过滤。

Iterator<AddressEO> iterator = new HashSet<AddressEO>(list).iterator();
//遍历结果
while (iterator.hasNext()) {
AddressEO addressEO = iterator.next();
System.out.println(addressEO);
}



select
addresseo0_.id as id0_0_,
studentlis1_.id as id2_1_,
addresseo0_.address as address0_0_,
studentlis1_.address_id as address3_2_1_,
studentlis1_.course_id as course4_2_1_,
studentlis1_.name as name2_1_,
studentlis1_.address_id as address3_0__,
studentlis1_.id as id0__
from
t_address addresseo0_
inner join
t_student studentlis1_
on addresseo0_.id=studentlis1_.address_id
1 6#123

结贴!
zj978977593 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jumpheightway 的回复:]
没有搞懂你为啥要用连接

连接本来就是有一方必定有重复
[/Quote]
我是这样想的。address和student是一对多惰性关联。当我只要查询address只查询address而不会把student查询出来。按需取得信息。而不会查询无用数据。
jumpheightway 2011-06-26
  • 打赏
  • 举报
回复
没有搞懂你为啥要用连接

连接本来就是有一方必定有重复
JavaMan_KA 2011-06-26
  • 打赏
  • 举报
回复
还真没这么用过,如果你hql没写错的话,返回的肯定是AddressEO的list。
zj978977593 2011-06-25
  • 打赏
  • 举报
回复
从查询结果来看有很多AddressEO对象。且每一个都一样的。不是只有一个AddressEO吗。里面的studentList有多个吗。
空白-键 2011-06-25
  • 打赏
  • 举报
回复
AddressEO列表
zj978977593 2011-06-25
  • 打赏
  • 举报
回复
写错了。hql是
from AddressEO a inner join fetch a.studentList where a.id=1

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧