解决org.hibernate.collection.PersistentSet 的页面取值
来源:互联网 发布:韩春雨方舟子知乎 编辑:程序博客网 时间:2024/05/21 21:40
hibernate 一对多映射的属性类型是set类型,不是list
页面上就不能${pojo.relations[0].xx}这样取值
设有 public class pojo{
private String id
private set relations;
}
public class relation{
private String id;
private String name;
}
如果是freemarker可以按照set取值的方式这样写
${poji.relations.iterator().next().id}//这里只取的第一个值
附上自己的一小段代码:
- list = baseDao.findByHql(TUser.class, hql, null);
- if(null !=list && list.size()>0)
- for (TUser tUser : list) {
- super.getHibernateTemplate().initialize(tUser.getTOrganization());
- super.getHibernateTemplate().initialize(tUser.getTUserRoleRelates());
- //上面只能加载到TUserRoleRelates.id.role.roleId,如要获取roleName,roleDesc,继续加载!
- Set roleSet=tUser.getTUserRoleRelates();
- if(!roleSet.isEmpty() && null!=roleSet){
- Iterator it=roleSet.iterator();
- //这里只取第一个结果,默认一个用户对应一个角色
- TUserRoleRelate tRelate=(TUserRoleRelate)it.next();
- //加载角色信息
- super.getHibernateTemplate().initialize(tRelate.getId().getTRole());
- }
- }
- return list;
ftl页面:
- ${item.TUserRoleRelates.iterator().next().id.TRole.roleName!}
注意判断roleSet有没有值
Java-Iterator的用法
2012-06-20 17:36:29| 分类: Java|举报|字号 订阅
下载LOFTER我的照片书 |
spring-data-jpa 复杂查询的写法(包含or的查询)
- 博客分类:
- spring
记录一下,因为之前遇见的spring-data-jpa相关业务都是很简单的处理掉了。
场景如下:很简单的CMS常用查询,栏目下有多个子栏目,子栏目有包含内容。
所以比如有如下结构时:栏目A下有两个子栏目B,C;这三个栏目下都有各自的内容, 那么当查询A下的内容时,肯定也是要包含B,C栏目下的内容。
比如说A栏目的id是 10 ,再加上别的查询条件的话, 也就是说 sql 语句肯定是类似:
想来想去发现实在没有简单的办法做or查询之后跟动态的and查询参数,好像只能自己构造,所以在此记录一下,避免忘记。
此处动态的and 查询条件构造是使用了springside的方法。并且我不知道这样的构造方法是不是spring-data-jpa的标准做法,如果不是,请指正
实际查询的输出sql如下,where之前省略:
场景如下:很简单的CMS常用查询,栏目下有多个子栏目,子栏目有包含内容。
- public class Channel{
- ....
- private String parentIds;//所有的父节点,简化查询策略 例如 0,1,11,
- private List<Channel> channels = Lists.newArrayList(); //所有的儿子栏目
- ...
- }
- public class Content{
- private Channel channel; //属于哪个栏目
- }
所以比如有如下结构时:栏目A下有两个子栏目B,C;这三个栏目下都有各自的内容, 那么当查询A下的内容时,肯定也是要包含B,C栏目下的内容。
比如说A栏目的id是 10 ,再加上别的查询条件的话, 也就是说 sql 语句肯定是类似:
- select * from Content as s where (s.channel.id = 10 or s.channel.parentIds like '%,10,%') and s.yyy = 'xxxxx' and s.xxx = 'yyyy';
想来想去发现实在没有简单的办法做or查询之后跟动态的and查询参数,好像只能自己构造,所以在此记录一下,避免忘记。
此处动态的and 查询条件构造是使用了springside的方法。并且我不知道这样的构造方法是不是spring-data-jpa的标准做法,如果不是,请指正
- /**
- * 查询某个栏目下的所有文章,并且分页。
- *
- * 如该栏目下有子栏目,则需要一起显示
- *
- * @param channelId 栏目id
- * @param searchParams
- * @param pageNumber
- * @param pageSize
- * @return
- */
- public Page<Content> getContentListPaged(final Integer channelId,final Collection<SearchFilter> filters,int pageNumber, int pageSize){
- return contentDao.findAll(new Specification<Content>(){
- @Override
- public Predicate toPredicate(Root<Content> root,
- CriteriaQuery<?> query, CriteriaBuilder builder) {
- //path转化
- List<Predicate> orPredicates = Lists.newArrayList();
- Path<String> idPath = root.get("channel").get("id");
- Path<String> parentIdsPath = root.get("channel").get("parentIds");
- Predicate p1 = builder.equal(root.get("channel").get("id"), channelId);
- orPredicates.add(builder.or(p1));
- Predicate p2 = builder.like((Path)root.get("channel").get("parentIds"), "%," + channelId + ",%");
- orPredicates.add(builder.or(p2));
- //以下是springside3提供的方法
- Predicate o = DynamicSpecifications.bySearchFilter(filters, Content.class).toPredicate(root, query, builder);
- Predicate p = builder.or(orPredicates.toArray(new Predicate[orPredicates.size()]));
- query.where(p,o);
- return null;
- }
- }, new PageRequest(pageNumber - 1, pageSize));
- }
实际查询的输出sql如下,where之前省略:
- where
- content0_.channel_id=channel1_.id
- and (
- content0_.channel_id=21
- or channel1_.parentIds like ?
- )
- and (
- content0_.title like ?
- ) limit ?
0 0
- 解决org.hibernate.collection.PersistentSet 的页面取值
- EJB3 Exception:java.lang.ClassNotFoundException: org.hibernate.collection.PersistentSet
- 解决org.hibernate.QueryException illegal attempt to dereference collection 异常错误
- 解决org.hibernate.QueryException illegal attempt to dereference collection 错误异常
- org.hibernate.NonUniqueObjectException 个人的解决
- org.hibernate.DuplicateMappingException: Duplicate collection role mapping
- org.hibernate.LazyInitializationException: failed to lazily initialize a collection..的解决方案
- 解决Hibernate页面的延迟加载
- 正确解决org.hibernate.DuplicateMappingException
- org.hibernate.MappingNotFoundException解决小结
- org.hibernate.hql.ast.QuerySyntaxException: unexpected token 的解决
- 关于ClassNotFoundException: org.hibernate.hql.ast.HqlToken 问题的解决
- hiberate的org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException异常解决
- hibernate问题org.hibernate.MappingException解决
- org.hibernate.exception.GenericJDBCException: could not initialize a collection
- org.hibernate.QueryException: illegal attempt to dereference collection
- org.hibernate.HibernateException: Illegal attempt to associate a collection
- org.hibernate.QueryException: illegal attempt to dereference collection 异常
- 第一个python程序
- Linux下chkconfig命令详解
- Ubuntu解决依赖
- iOS开发 贝塞尔曲线UIBezierPath
- 玩无限消乐的设计示例(结束篇)动态选项设置等
- 解决org.hibernate.collection.PersistentSet 的页面取值
- 如何降低win10对C盘的权限控制
- Leetcode010--三个数字的和为0
- Spark: From Zero To One
- Android ShareSDK第三方微信QQ登陆
- FastDFS upload 和 download大概流程
- mysql 基本语句总结
- C++字符串常用功能
- 王朝 第十一周大赛计分奖