-
Hibernate DetachedCriteria 查询set 类型的字段20
例:
public class Users {
private Set challenges = new HashSet(0);
}
public class Challenge {
private Integer challengeid;
private Users users;
}
User 和Challenge 是一对多的关系
现在想根据 Users 中的challenges.challengeid的某一个属性查询
challenges 是一个属性
问题补充:太谢谢了,实在太多朋友回答了,我也不好让大家都百忙了半天,每个朋友都回答了,那就等问题关闭,每个都加分!!!!!!2011年1月01日 14:17
6个答案 按时间排序 按投票排序
-
7、为了避免resultList中的重复记录, 可以转换为Set集合, Set中存放的记录不允许相同。
以下是对第6的结果进行去重复记录Set resultSet = new HashSet(); // 添加以后自动去掉重复记录 resultSet.addAll(resultList); // 循环打印出小明对应的所有Challenge信息 for (Iterator it = resultSet.iterator(); it.hasNext();) { Users user = (Users) it.next(); System.out.println(user.getUserName()); }
输出结果:
小强
小明2011年1月01日 17:38
-
6、根据users关联的集合challenges的属性进行查询
// 查询条件 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Users.class); detachedCriteria.createAlias("challenges", "cs"); detachedCriteria.add(Restrictions.like("cs.challengeName", "%" + "挑战" + "%")); Criteria criteria = detachedCriteria.getExecutableCriteria(session); // 查询 List resultList = criteria.list(); if (resultList != null && resultList.size() > 0) { for (int i = 0; i < resultList.size(); i++) { Users user = (Users) resultList.get(i); System.out.println(user.getUserName()); } }
输出结果:
小明
小明
小强
重复结果可以再过滤,这个应该是你想要的查询方式
2011年1月01日 17:33
-
1、Users实体
public class Users implements java.io.Serializable { // Fields private Long id; private String userName; private Set challenges = new HashSet(0); ...... }
表记录:
id user_name
1 小明
2 小强
2、Challenge实体public class Challenge implements java.io.Serializable { // Fields private Long challengeid; private Users users; private String challengeName; ...... }
表记录:
id challenge_name user_id
1 挑战1 1
2 挑战2 1
3 挑战3 2
3、根据challengeid查询Challenge对象,再关联出相应的users信息// 查询条件 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Challenge.class); detachedCriteria.add(Restrictions.eq("challengeid", new Long(1))); Criteria criteria = detachedCriteria.getExecutableCriteria(session); // 查询 List resultList = criteria.list(); if (resultList != null && resultList.size() > 0) { for (int i = 0; i < resultList.size(); i++) { Challenge challenge = (Challenge) resultList.get(i); // 打印出challenge所关联的users信息 System.out.println(challenge.getUsers().getUserName()); } }
结果输出:
小明
4、根据challengeName模糊查询查询Challenge对象,再关联出相应的users信息// 查询条件 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Challenge.class); detachedCriteria.add(Restrictions.like("challengeName", "%" + "挑战" + "%")); Criteria criteria = detachedCriteria.getExecutableCriteria(session); // 查询 List resultList = criteria.list(); if (resultList != null && resultList.size() > 0) { for (int i = 0; i < resultList.size(); i++) { Challenge challenge = (Challenge) resultList.get(i); // 打印出challenge所关联的users信息 System.out.println(challenge.getUsers().getUserName()); } }
结果输出:
小明
小明
小强
5、根据users查询,查询小明对应的所有Challenge信息// 查询条件 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Users.class); detachedCriteria.add(Restrictions.eq("userName", "小明")); Criteria criteria = detachedCriteria.getExecutableCriteria(session); // 查询 List resultList = criteria.list(); if (resultList != null && resultList.size() > 0) { Set set = ((Users) resultList.get(0)).getChallenges(); // 循环打印出小明对应的所有Challenge信息 for (Iterator it = set.iterator(); it.hasNext();) { Challenge challenge = (Challenge) it.next(); System.out.println(challenge.getChallengeName()); } }
结果输出:
挑战2
挑战1
2011年1月01日 17:23
-
DetachedCriteria detachedCriteria=DetachedCriteria.forClass("Users"); detachedCriteria.createAlias("challenges","c").add(Restrictions.eq("c.challengeid", "查询值"));
我查询的网页:
http://topic.csdn.net/u/20090616/10/3e8d5f18-7144-4248-85a4-41bf5c4e3903.html
http://stackoverflow.com/questions/1987471/nhibernate-exclude-a-property-from-a-projection-list-select-clause
http://topic.csdn.net/u/20080225/13/9eb2fbf7-117b-41f4-84d6-4b5461780388.html
希望能帮助你2011年1月01日 16:52
-
DetachedCriteria detachedCriteria=DetachedCriteria.forClass("Users");
detachedCriteria.createAlias("challenges","c").add(Restrictions.eq("c.challengeid", "查询值"));
我查询的网页:
http://topic.csdn.net/u/20090616/10/3e8d5f18-7144-4248-85a4-41bf5c4e3903.html
http://stackoverflow.com/questions/1987471/nhibernate-exclude-a-property-from-a-projection-list-select-clause
http://topic.csdn.net/u/20080225/13/9eb2fbf7-117b-41f4-84d6-4b5461780388.html
希望能帮助你2011年1月01日 16:51
相关推荐
在Java的持久化框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来构建动态和复杂的查询。Criteria API的主要优点在于它的灵活性,允许开发者在运行时构建查询,而不必预先定义HQL(Hibernate Query ...
- Hibernate支持多种关系映射,本章将深入讲解一对一、一对多和多对一的关系配置,包括集合类型的选择(List, Set, Map等)和级联操作的设置。 4. **Chapter 9:多对多关系映射** - 多对多关系在数据库设计中常见...
17. **集合映射**:Hibernate支持List、Set、Map等多种集合类型的映射。 18. **延迟加载(Lazy Loading)**:默认情况下,关联对象会在需要时才加载,以减少数据库访问。 19. **级联操作**:可以设置在操作一个...
2. Criteria API:提供一种更加灵活的查询方式,通过Criteria、DetachedCriteria和Expression等类构建查询条件。 3. Native SQL查询:Hibernate也支持直接执行SQL查询,通过SQLQuery接口实现。 四、Caching ...
- **多字段查询**: - `String sql = "select customer.customerName, customer.age from Customer as customer";` - `Iterator iterator = q.iterate();`遍历结果集,每条记录为一个`Object[]`数组。 3. **投影...
10. **集合映射**:Hibernate支持多种集合类型如List、Set、Map等的映射,可以通过`@OneToMany`、`@ManyToOne`、`@ManyToMany`等注解来定义。 11. **级联操作**:通过`cascade`属性,可以在保存、更新、删除等操作...
- 映射文件:定义实体类与数据库表的映射关系,包括主键、外键、字段类型等。 4. **Session与Transaction** - Session:作为数据库操作的主要接口,负责对象的持久化操作。 - Transaction:管理数据库事务,保证...
2. **Criteria 查询**: 动态构建查询,更灵活且类型安全。 3. **Criteria API** 还提供了DetachedCriteria,用于离线查询,提高性能。 ### 七、缓存机制 Hibernate 提供了两级缓存:第一级缓存是Session级别的,...
在Criteria查询中,我们可以通过`criteria.add(Criterion)`添加查询条件,`criteria.setFetchMode("association", FetchMode.JOIN)`设置联合查询模式,`criteria.setOrder(Order.asc("name"))`设置排序,`criteria....
Hibernate 支持List、Set、Map等各种Java集合类型的映射,通过@OneToMany或@ManyToMany配合@JoinColumn或@JoinTable来定义。 9. **级联操作** 级联操作允许在对一个对象的操作中自动影响到相关联的对象。例如,@...
- Hibernate提供了List、Set、Map、Bag等多种集合类型的映射,以便处理数据库中的关联数据。 14. **延迟加载(Lazy Loading)**: - 为了优化性能,Hibernate支持懒加载。默认情况下,关联的对象或集合只在需要时...
- Criteria API:通过Criteria和DetachedCriteria对象构建查询,更加灵活且类型安全。 - Query API:基于HQL的查询,可以执行预编译的查询。 - Native SQL:直接使用SQL进行查询,适用于Hibernate无法处理的复杂...
2. Criteria查询:使用Criteria和DetachedCriteria构建查询条件,返回List对象。 3. Native SQL查询:直接执行SQL语句,获取结果集,适用于复杂或特定数据库的查询。 六、关联映射 1. 一对一(OneToOne):一个实体...
9. ** Criteria API的DetachedCriteria**:DetachedCriteria允许在不处于Session上下文的情况下创建查询条件,然后在需要时再绑定到Session执行。 10. **Criteria的Join操作**:Criteria API支持连接查询,可以方便...
- Hibernate支持多种集合类型,如List、Set、Map等,以及有序集合(bag)。 - 集合的懒加载:按需加载关联对象,减少初始加载时的内存消耗。 8. **事件和监听器** - Hibernate提供预加载、加载、保存、更新、...
- Criteria查询:使用Criteria、DetachedCriteria构建查询条件,可以添加限制、排序、分页等。 - 查询缓存:提高查询效率,分为一级缓存(Session缓存)和二级缓存(SessionFactory缓存)。 4. Hibernate面试题...
- **SimpleProjection**:针对单个字段的统计查询。 - **ProjectionList**:多个`SimpleProjection`的组合。 - **Property**:表示实体对象的属性。 **示例代码**: ```java Criteria crit = sess....
在`list()`方法中,`DetachedCriteria.forClass(Leave.class)`创建了一个针对`Leave`类的查询,`criteria.addOrder(Order.desc("regtime"))`设置了按“regtime”字段降序排列。 6. **Pagination(分页)**: 代码...
9. **映射高级特性**:可能包括集合映射(例如List、Set、Bag、Map),复杂类型映射,以及自定义类型和用户定义的SQL类型。 10. **最佳实践和设计模式**:提供关于如何在实际项目中有效地使用NHibernate的建议,...