随笔 - 6  文章 - 129  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(14)

随笔档案(6)

文章分类(467)

文章档案(423)

相册

收藏夹(18)

JAVA

搜索

  •  

积分与排名

  • 积分 - 822231
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

hibernate的DetachedCriteria查询(多对多查询问题)
hibernate的DetachedCriteria查询
图书和作者之间是多对多关系.现在知道作者.要查该作者所写的图书,条件应该怎样写啊
我这样写是错误的
detachedCriteria.add(Restrictions.eq("authors", authorSet));请问这句应该怎样写才对
authorSet是一个Set类型的变量

解决办法
detachedCriteria.createAlias("authors", "auths").add( Restrictions.in("auths.name", authorSet));

不过出又出现了新的问题
查得的结果以数组的方式返回,数组包含了Book和Author两个对象了,能不能设置一下,让它只返回Book对象就好了



posted on 2008-01-12 10:11 Ke 阅读(4687) 评论(3)  编辑  收藏 所属分类: 问题区

FeedBack:
# re: hibernate的DetachedCriteria查询(多对多查询问题) 2009-02-12 23:21 信息
我也碰到相同的问题啊  回复  更多评论
  
# re: hibernate的DetachedCriteria查询(多对多查询问题) 2009-04-15 20:09 sheila
我这里有一个比较笨的方法。

多对多在数据库当中还是会转化为两个多对一。在author和book之间再建一个表叫ownership。author和ownership是一对多,book和ownership也是一对多,在写hibernate查询的时候可以这样写

Criteria ownershipCriteria = session.createCriteria(Ownership.class);
Criteria bookCriteria = session.createCriteria(Book.class);
Criteria authorCriteria = ownershipCriteria.createCriteria("author");
authorCriteria.add(Expression.like(AuthorDAO.AUTHOR_NAME, "%"+authorName+"%"));

List ownerships = ownershipCriteria.list();
List results = new ArrayList(0);
for(int i=0;i<ownerships.size();i++) {
Book book = ((Ownership)ownerships.get(i)).getBook();
Hibernate.initialize(book);
results.add(book);
}
return results;

这样results里面就只有book了。  回复  更多评论
  
# re: hibernate的DetachedCriteria查询(多对多查询问题) 2009-08-13 10:23 agu
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); 加上这句就可以了   回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问