- 浏览: 728019 次
- 性别:
- 来自: 西安
-
文章分类
最新评论
-
cuqing:
laogao598599 写道匿名内部类不一定是局部内部类,还 ...
匿名内部类访问外部类中的局部变量必须是final属性 -
laogao598599:
匿名内部类不一定是局部内部类,还可以作为成员变量
匿名内部类访问外部类中的局部变量必须是final属性 -
stand_star:
非常给力!
struts2验证规则配置文件命名方式 -
wenlongsust:
嗯, 将返回值修改为html的确就可以了
EasyUI form ajax submit后,在IE下提示下载内容的解决办法 -
勇往直前wwt:
这样是自动增长,但每次id还得插入,如何只插入其他字段而让id ...
把主键定义为自动增长标识符类型
Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria 。
Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样:
Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;
DetachedCriteria 是离线的,创建时无需 Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name) 进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate ().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结 果。
Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设 置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式。对于 Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式)。
下面对 Criterion 和 Projection 进行详细说明:
Criterion 是 Criteria 的查询条件。
Criteria 提供了 add(Criterion criterion) 方法来 添加查询条件。
Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。
而 Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操 作符进行来联结查询条件集合。
Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态 方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件 (SimpleExpression 实例)。除此之外, Restrictions 还提供了方法来创建 conjunction 和 disjunction 实例,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合 。
至于 Example 的创建有所不同, Example 本身提供了一个静态方法 create(Object entity) ,即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设置一些 过滤条件:
Example exampleUser =Example.create(u) .ignoreCase() // 忽略大小写 .enableLike(MatchMode.ANYWHERE); // 对 String 类型的属性,无论在那里值在那里都匹配。相当于 %value%
Project 主要是让 Criteria 能够进行报表查询,并可以实现分组。
Project 主要有 SimpleProjection 、 ProjectionList 和 Property 三个实现。
其中 SimpleProjection 和 ProjectionList 的实例化是由内建的 Projections 来完成,如提供的 avg 、 count 、 max 、 min 、 sum 可以让开发者很容易对某个字段进行统计查询。
Property 是对某个字段进行查询条件的设置,如通过Porperty.forName(“color”).in (new String[]{“black”,”red”,”write”}); 则可以创建一个 Project 实例。通过 criteria 的 add(Project) 方法加入到查询条件中去。
使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查 询条件的创建和组装,下面介绍几种用法:
1. 创建一个Criteria 实例 org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
2. 限制结果集内容 一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。 org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.between("weight", minWeight, maxWeight) )
.list();
约束可以按逻辑分组。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(Restrictions.eq( "age", new Integer(0) ), Restrictions.isNull("age") ) )
.list();
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
.add( Restrictions.disjunction()
.add( Restrictions.isNull("age") )
.add( Restrictions.eq("age", new Integer(0) ) )
.add( Restrictions.eq("age", new Integer(1) ) )
.add( Restrictions.eq("age", new Integer(2) ) )) )
.list();
Hibernate提供了相当多的内置criterion类型(Restrictions 子类), 但是尤其有用的是可以允许 你直接使用SQL。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.sql("lower({alias}.name) like lower(?)", "Fritz%", Hibernate.STRING) )
.list();
{alias}占位符应当被替换为被查询实体的列别名。 Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个 Property。
Property age = Property.forName("age");
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.disjunction()
.add( age.isNull() )
.add( age.eq( new Integer(0) ) )
.add( age.eq( new Integer(1) ) )
.add( age.eq( new Integer(2) ) ) ) )
.add( Property.forName("name").in( new String[] { "Fritz", "Izi", "Pk" } ) )
.list();
3. 结果集排序 你可以使用org.hibernate.criterion.Order来为查询结果排序。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.setMaxResults(50)
.list();
List cats = sess.createCriteria(Cat.class)
.add( Property.forName("name").like("F%") )
.addOrder( Property.forName("name").asc() )
.addOrder( Property.forName("age").desc() )
.setMaxResults(50)
.list();
4. 关联 你可以使用createCriteria()非常容易的在互相关联的实体间建立 约束。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.createCriteria("kittens")
.add( Restrictions.like("name", "F%")
.list();
注意第二个 createCriteria()返回一个新的 Criteria实例,该实例引用kittens 集合中的元素。 接下来,替换形态在某些情况下也是很有用的。
List cats = sess.createCriteria(Cat.class)
.createAlias("kittens", "kt")
.createAlias("mate", "mt")
.add( Restrictions.eqProperty("kt.name", "mt.name") )
.list();
(createAlias()并不创建一个新的 Criteria实例。) Cat实例所保存的之前两次查询所返回的kittens集合是 没有被条件预过滤的。如果你希望只获得 符合条件的kittens, 你必须使用returnMaps()。
List cats = sess.createCriteria(Cat.class)
.createCriteria("kittens", "kt")
.add( Restrictions.eq("name", "F%") )
.returnMaps()
.list();
Iterator iter = cats.iterator();
while ( iter.hasNext() ) {
Map map = (Map) iter.next();
Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
Cat kitten = (Cat) map.get("kt");
}
5. 动态关联抓取 你可以使用setFetchMode()在运行时定义动态关联抓取的语义。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
这个查询可以通过外连接抓取mate和kittens。
6. 查询示例 org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查询。
Cat cat = new Cat(); cat.setSex('F');
cat.setColor(Color.BLACK);
List results = session.createCriteria(Cat.class)
.add( Example.create(cat) )
.list();
版本属性、标识符和关联被忽略。默认情况下值为null的属性将被排除。 可以自行调整Example使之更实用。
Example example = Example.create(cat)
.excludeZeroes() //exclude zero valued properties
.excludeProperty("color") //exclude the property named "color"
.ignoreCase() //perform case insensitive string comparisons
.enableLike(); //use like for string comparisons List results =
session.createCriteria(Cat.class)
.add(example)
.list();
甚至可以使用examples在关联对象上放置条件。
List results = session.createCriteria(Cat.class)
.add( Example.create(cat) )
.createCriteria("mate")
.add( Example.create( cat.getMate() ) )
.list();
7. 投影(Projections)、聚合(aggregation)和分组(grouping) org.hibernate.criterion.Projections是 Projection 的实例工厂。我们通过调用 setProjection()应用投影到一个查询。
List results = session.createCriteria(Cat.class)
.setProjection( Projections.rowCount() )
.add( Restrictions.eq("color", Color.BLACK) )
.list();
List results = session.createCriteria(Cat.class)
.setProjection(
Projections.projectionList()
.add( Projections.rowCount() )
.add( Projections.avg("weight") )
.add( Projections.max("weight") )
.add( Projections.groupProperty("color") )
)
.list();
在一个条件查询中没有必要显式的使用 "group by" 。某些投影类型就是被定义为 分组投影,他 们也出现在SQL的group by子句中。 可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。下面是两种不同的 实现方式:
List results = session.createCriteria(Cat.class)
.setProjection(
Projections.alias( Projections.groupProperty("color"), "colr" ) )
.addOrder( Order.asc("colr") )
.list();
List results = session.createCriteria(Cat.class)
.setProjection( Projections.groupProperty("color").as("colr") )
.addOrder( Order.asc("colr") )
.list();
alias()和as()方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。简而言之, 当你添加一个投影到一个投影列表中时 你可以为它指定一个别名:
List results = session.createCriteria(Cat.class)
.setProjection(
Projections.projectionList()
.add( Projections.rowCount(), "catCountByColor" )
.add( Projections.avg("weight"), "avgWeight" )
.add( Projections.max("weight"), "maxWeight" )
.add( Projections.groupProperty("color"), "color" )
)
.addOrder( Order.desc("catCountByColor") )
.addOrder( Order.desc("avgWeight") )
.list();
List results = session.createCriteria(Domestic.class, "cat")
.createAlias("kittens", "kit")
.setProjection(
Projections.projectionList()
.add( Projections.property("cat.name"), "catName" )
.add( Projections.property("kit.name"), "kitName" )
)
.addOrder( Order.asc("catName") )
.addOrder( Order.asc("kitName") )
.list();
也可以使用Property.forName()来表示投影:
List results = session.createCriteria(Cat.class)
.setProjection( Property.forName("name") )
.add( Property.forName("color").eq(Color.BLACK) )
.list();
List results = session.createCriteria(Cat.class)
.setProjection(
Projections.projectionList()
.add( Projections.rowCount().as("catCountByColor") )
.add( Property.forName("weight").avg().as("avgWeight") )
.add( Property.forName("weight").max().as("maxWeight") )
.add( Property.forName("color").group().as("color" )
)
.addOrder( Order.desc("catCountByColor") )
.addOrder( Order.desc("avgWeight") )
.list();
8. 离线(detached)查询和子查询 DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的 Session来 执行它。
DetachedCriteria query = DetachedCriteria.forClass(Cat.class)
.add( Property.forName("sex").eq('F') );
//创建一个Session
Session session = .;
Transaction txn = session.beginTransaction();
List results = query.getExecutableCriteria(session).
setMaxResults(100)
.list();
txn.commit();
session.close();
DetachedCriteria也可以用以表示子查询。条件实例包含子查询可以通过 Subqueries或者 Property获得。
DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight").avg() );
session.createCriteria(Cat.class)
.add( Property.forName("weight).gt(avgWeight) )
.list();
DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight") );
session.createCriteria(Cat.class)
.add( Subqueries.geAll("weight", weights) )
.list();
相互关联的子查询也是有可能的:
DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, "cat2")
.setProjection( Property.forName("weight").avg() )
.add( Property.forName("cat2.sex").eqProperty("cat.sex") );
session.createCriteria(Cat.class, "cat")
.add( Property.forName("weight).gt(avgWeightForSex) )
.list();
Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样:
Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;
DetachedCriteria 是离线的,创建时无需 Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name) 进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate ().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结 果。
Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设 置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式。对于 Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式)。
下面对 Criterion 和 Projection 进行详细说明:
Criterion 是 Criteria 的查询条件。
Criteria 提供了 add(Criterion criterion) 方法来 添加查询条件。
Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。
而 Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操 作符进行来联结查询条件集合。
Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态 方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件 (SimpleExpression 实例)。除此之外, Restrictions 还提供了方法来创建 conjunction 和 disjunction 实例,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合 。
至于 Example 的创建有所不同, Example 本身提供了一个静态方法 create(Object entity) ,即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设置一些 过滤条件:
Example exampleUser =Example.create(u) .ignoreCase() // 忽略大小写 .enableLike(MatchMode.ANYWHERE); // 对 String 类型的属性,无论在那里值在那里都匹配。相当于 %value%
Project 主要是让 Criteria 能够进行报表查询,并可以实现分组。
Project 主要有 SimpleProjection 、 ProjectionList 和 Property 三个实现。
其中 SimpleProjection 和 ProjectionList 的实例化是由内建的 Projections 来完成,如提供的 avg 、 count 、 max 、 min 、 sum 可以让开发者很容易对某个字段进行统计查询。
Property 是对某个字段进行查询条件的设置,如通过Porperty.forName(“color”).in (new String[]{“black”,”red”,”write”}); 则可以创建一个 Project 实例。通过 criteria 的 add(Project) 方法加入到查询条件中去。
使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查 询条件的创建和组装,下面介绍几种用法:
1. 创建一个Criteria 实例 org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
2. 限制结果集内容 一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。 org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.between("weight", minWeight, maxWeight) )
.list();
约束可以按逻辑分组。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(Restrictions.eq( "age", new Integer(0) ), Restrictions.isNull("age") ) )
.list();
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
.add( Restrictions.disjunction()
.add( Restrictions.isNull("age") )
.add( Restrictions.eq("age", new Integer(0) ) )
.add( Restrictions.eq("age", new Integer(1) ) )
.add( Restrictions.eq("age", new Integer(2) ) )) )
.list();
Hibernate提供了相当多的内置criterion类型(Restrictions 子类), 但是尤其有用的是可以允许 你直接使用SQL。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.sql("lower({alias}.name) like lower(?)", "Fritz%", Hibernate.STRING) )
.list();
{alias}占位符应当被替换为被查询实体的列别名。 Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个 Property。
Property age = Property.forName("age");
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.disjunction()
.add( age.isNull() )
.add( age.eq( new Integer(0) ) )
.add( age.eq( new Integer(1) ) )
.add( age.eq( new Integer(2) ) ) ) )
.add( Property.forName("name").in( new String[] { "Fritz", "Izi", "Pk" } ) )
.list();
3. 结果集排序 你可以使用org.hibernate.criterion.Order来为查询结果排序。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.setMaxResults(50)
.list();
List cats = sess.createCriteria(Cat.class)
.add( Property.forName("name").like("F%") )
.addOrder( Property.forName("name").asc() )
.addOrder( Property.forName("age").desc() )
.setMaxResults(50)
.list();
4. 关联 你可以使用createCriteria()非常容易的在互相关联的实体间建立 约束。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.createCriteria("kittens")
.add( Restrictions.like("name", "F%")
.list();
注意第二个 createCriteria()返回一个新的 Criteria实例,该实例引用kittens 集合中的元素。 接下来,替换形态在某些情况下也是很有用的。
List cats = sess.createCriteria(Cat.class)
.createAlias("kittens", "kt")
.createAlias("mate", "mt")
.add( Restrictions.eqProperty("kt.name", "mt.name") )
.list();
(createAlias()并不创建一个新的 Criteria实例。) Cat实例所保存的之前两次查询所返回的kittens集合是 没有被条件预过滤的。如果你希望只获得 符合条件的kittens, 你必须使用returnMaps()。
List cats = sess.createCriteria(Cat.class)
.createCriteria("kittens", "kt")
.add( Restrictions.eq("name", "F%") )
.returnMaps()
.list();
Iterator iter = cats.iterator();
while ( iter.hasNext() ) {
Map map = (Map) iter.next();
Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
Cat kitten = (Cat) map.get("kt");
}
5. 动态关联抓取 你可以使用setFetchMode()在运行时定义动态关联抓取的语义。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
这个查询可以通过外连接抓取mate和kittens。
6. 查询示例 org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查询。
Cat cat = new Cat(); cat.setSex('F');
cat.setColor(Color.BLACK);
List results = session.createCriteria(Cat.class)
.add( Example.create(cat) )
.list();
版本属性、标识符和关联被忽略。默认情况下值为null的属性将被排除。 可以自行调整Example使之更实用。
Example example = Example.create(cat)
.excludeZeroes() //exclude zero valued properties
.excludeProperty("color") //exclude the property named "color"
.ignoreCase() //perform case insensitive string comparisons
.enableLike(); //use like for string comparisons List results =
session.createCriteria(Cat.class)
.add(example)
.list();
甚至可以使用examples在关联对象上放置条件。
List results = session.createCriteria(Cat.class)
.add( Example.create(cat) )
.createCriteria("mate")
.add( Example.create( cat.getMate() ) )
.list();
7. 投影(Projections)、聚合(aggregation)和分组(grouping) org.hibernate.criterion.Projections是 Projection 的实例工厂。我们通过调用 setProjection()应用投影到一个查询。
List results = session.createCriteria(Cat.class)
.setProjection( Projections.rowCount() )
.add( Restrictions.eq("color", Color.BLACK) )
.list();
List results = session.createCriteria(Cat.class)
.setProjection(
Projections.projectionList()
.add( Projections.rowCount() )
.add( Projections.avg("weight") )
.add( Projections.max("weight") )
.add( Projections.groupProperty("color") )
)
.list();
在一个条件查询中没有必要显式的使用 "group by" 。某些投影类型就是被定义为 分组投影,他 们也出现在SQL的group by子句中。 可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。下面是两种不同的 实现方式:
List results = session.createCriteria(Cat.class)
.setProjection(
Projections.alias( Projections.groupProperty("color"), "colr" ) )
.addOrder( Order.asc("colr") )
.list();
List results = session.createCriteria(Cat.class)
.setProjection( Projections.groupProperty("color").as("colr") )
.addOrder( Order.asc("colr") )
.list();
alias()和as()方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。简而言之, 当你添加一个投影到一个投影列表中时 你可以为它指定一个别名:
List results = session.createCriteria(Cat.class)
.setProjection(
Projections.projectionList()
.add( Projections.rowCount(), "catCountByColor" )
.add( Projections.avg("weight"), "avgWeight" )
.add( Projections.max("weight"), "maxWeight" )
.add( Projections.groupProperty("color"), "color" )
)
.addOrder( Order.desc("catCountByColor") )
.addOrder( Order.desc("avgWeight") )
.list();
List results = session.createCriteria(Domestic.class, "cat")
.createAlias("kittens", "kit")
.setProjection(
Projections.projectionList()
.add( Projections.property("cat.name"), "catName" )
.add( Projections.property("kit.name"), "kitName" )
)
.addOrder( Order.asc("catName") )
.addOrder( Order.asc("kitName") )
.list();
也可以使用Property.forName()来表示投影:
List results = session.createCriteria(Cat.class)
.setProjection( Property.forName("name") )
.add( Property.forName("color").eq(Color.BLACK) )
.list();
List results = session.createCriteria(Cat.class)
.setProjection(
Projections.projectionList()
.add( Projections.rowCount().as("catCountByColor") )
.add( Property.forName("weight").avg().as("avgWeight") )
.add( Property.forName("weight").max().as("maxWeight") )
.add( Property.forName("color").group().as("color" )
)
.addOrder( Order.desc("catCountByColor") )
.addOrder( Order.desc("avgWeight") )
.list();
8. 离线(detached)查询和子查询 DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的 Session来 执行它。
DetachedCriteria query = DetachedCriteria.forClass(Cat.class)
.add( Property.forName("sex").eq('F') );
//创建一个Session
Session session = .;
Transaction txn = session.beginTransaction();
List results = query.getExecutableCriteria(session).
setMaxResults(100)
.list();
txn.commit();
session.close();
DetachedCriteria也可以用以表示子查询。条件实例包含子查询可以通过 Subqueries或者 Property获得。
DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight").avg() );
session.createCriteria(Cat.class)
.add( Property.forName("weight).gt(avgWeight) )
.list();
DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight") );
session.createCriteria(Cat.class)
.add( Subqueries.geAll("weight", weights) )
.list();
相互关联的子查询也是有可能的:
DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, "cat2")
.setProjection( Property.forName("weight").avg() )
.add( Property.forName("cat2.sex").eqProperty("cat.sex") );
session.createCriteria(Cat.class, "cat")
.add( Property.forName("weight).gt(avgWeightForSex) )
.list();
发表评论
-
unsaved-value(转)
2011-04-27 12:08 1211<id name="id" colu ... -
JNDI
2011-04-16 10:14 1178JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易 ... -
hibernate 常用函数
2011-04-08 15:43 1267ABS(n) 取绝对值 SQRT(n) ... -
hsqldb关键字position
2011-03-31 23:32 1253hsqldb关键字position造成hibernate.xm ... -
getHibernateTemplate().bulkUpdate()
2011-03-08 15:07 10948用上面的hibernate模板方法执行删除操作,会有问题 例如 ... -
数据库not null
2011-03-08 14:57 1231如果一个持久化对象中对应数据库表有必填属性,例如A对象a1属性 ... -
在Hibernate中使用日期函数获取数据库时间
2010-12-15 11:35 2080在Hibernate中使用日期函 ... -
java数据类型与hibernate数据类型对应表
2010-10-22 09:17 1094... -
hibernate参数一览表
2010-09-29 16:34 1125Hibernate配置属性 属性名 用途 hibernate ... -
hibernate需要的jar
2010-08-23 13:46 17901.hibernate3.jar、commons-beanut ... -
[ERROR]-[org.hibernate.util.JDBCExceptionReporter] ORA-02289: 序列不存在
2010-04-27 12:55 5711[ERROR]-[org.hibernate.util.JDB ... -
根据hbm自动更新创建数据库
2010-04-23 10:34 1035<prop key="hibernate.hb ... -
getHibernateTemplate().findByExample()与getHibernateTemplate().find()
2010-04-23 10:25 53071.在使用hibernate查询数据库的时候,数据库中数据类型 ... -
为什么要使用HibernateCallback
2010-04-10 15:26 18491.this.getSession() 是org.spri ...
相关推荐
内容概要:本文介绍了利用Matlab/Simulink进行风电调频与风储联合仿真的方法。针对传统时域仿真耗时的问题,提出了一种基于频域模型的方法,实现了快速高效的仿真。文中详细描述了虚拟惯性控制和储能下垂控制的具体实现方式及其对系统频率稳定性的影响。通过频域模型,将复杂的微分方程转化为简单的矩阵运算,显著提高了仿真速度。同时,加入了SOC(荷电状态)管理和滑动平均滤波,确保了储能系统的安全可靠运行。实验结果显示,在相同的硬件条件下,频域模型的仿真速度比传统时域模型快了近十倍,且频率偏差明显减小。 适合人群:从事电力系统仿真、风电调频研究的专业人士和技术爱好者。 使用场景及目标:适用于需要快速验证风电调频控制策略的研究人员和工程师。主要目标是在保证仿真精度的同时大幅提高仿真速度,为风电并网提供技术支持。 其他说明:本文提供的模型专注于调频性能分析,不涉及风机内部动态细节。对于更详细的风机模型,作者提供了进一步的参考资料。
内容概要:本文介绍了一种针对电热综合能源系统的优化调度模型,该模型在传统微网(风、光、储、火)的基础上加入了电动汽车(EVs)和智能楼宇单元,并引入了碳排放和绿色证书交易机制。模型通过MATLAB和YALMIP工具进行求解,主要关注于优化能源分配方案,降低整体成本并控制碳排放。文中详细讨论了模型的目标函数设计、约束条件设定、电动汽车充放电策略、智能楼宇温控负荷预测、绿证交易价格机制等方面的内容。实验结果显示,在考虑碳交易和绿证交易的情况下,系统的灵活性和经济性均有所提高。 适合人群:从事电力系统优化、智能楼宇设计、电动汽车调度等领域研究的专业人士和技术爱好者。 使用场景及目标:适用于希望深入了解电热综合能源系统优化调度方法的研究人员,尤其是那些对碳市场和绿证交易感兴趣的从业者。目标是提供一种能够有效整合多种能源形式并兼顾环境效益的解决方案。 其他说明:文中提供的代码片段展示了具体的实现细节,对于想要进一步探索相关领域的读者具有很高的参考价值。此外,作者还分享了一些调参经验和遇到的问题解决办法,有助于初学者更好地理解和应用这一复杂的优化模型。
1、文件说明: Centos8操作系统texlive-cweb-7:20180414-12.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf texlive-cweb-7:20180414-12.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细介绍了如何使用Matlab对地表水源热泵系统进行建模,并采用粒子群算法来优化每小时的制冷量和制热量。首先,文章解释了地表水源热泵的工作原理及其重要性,随后展示了如何设定基本参数并构建热泵机组的基础模型。接着,文章深入探讨了粒子群算法的具体实现步骤,包括参数设置、粒子初始化、适应度评估以及粒子位置和速度的更新规则。为了确保优化的有效性和实用性,文中还讨论了如何处理实际应用中的约束条件,如设备的最大能力和制冷/制热模式之间的互斥关系。此外,作者分享了一些实用技巧,例如引入混合优化方法以加快收敛速度,以及在目标函数中加入额外的惩罚项来减少不必要的模式切换。最终,通过对优化结果的可视化分析,验证了所提出的方法能够显著降低能耗并提高系统的运行效率。 适用人群:从事暖通空调系统设计、优化及相关领域的工程师和技术人员,尤其是那些希望深入了解地表水源热泵系统特性和优化方法的专业人士。 使用场景及目标:适用于需要对地表水源热泵系统进行精确建模和优化的情景,旨在找到既满足建筑负荷需求又能使机组运行在最高效率点的制冷/制热量组合。主要目标是在保证室内舒适度的前提下,最大限度地节约能源并延长设备使用寿命。 其他说明:文中提供的Matlab代码片段可以帮助读者更好地理解和复现整个建模和优化过程。同时,作者强调了在实际工程项目中灵活调整相关参数的重要性,以便获得更好的优化效果。
内容概要:本文详细介绍了经验模态分解(EMD)在流体力学领域的应用,特别是通过MATLAB进行流场数据分析的方法。首先,文章解释了EMD的基本概念及其在处理非平稳信号方面的优势,如湍流和涡旋数据。接着,提供了具体的MATLAB代码示例,展示了如何将原始流场数据分解为多个本征模态函数(IMF),并通过可视化手段展示分解结果。此外,文中还讨论了一些常见的EMD应用技巧,如边界效应处理、筛分停止准则设置以及针对特定应用场景(如二维速度场、三维加速度信号)的优化方法。最后,强调了EMD在流场信号解剖中的重要性和实用性,并分享了多个实战案例,包括圆柱绕流、翼型失速、船舶波浪载荷等。 适合人群:从事流体力学研究的专业人士,尤其是需要处理非平稳流场数据的研究人员和技术人员。 使用场景及目标:适用于需要对复杂流场数据进行精细分析的情景,如风洞实验、CFD模拟结果后处理等。主要目标是帮助用户更好地理解和解析流场中的多尺度动态行为,提高数据分析的准确性和效率。 其他说明:文章不仅提供了详细的理论讲解,还包括丰富的代码示例和实用技巧,有助于读者快速掌握EMD的应用方法。同时,附带的实例数据和视频教程进一步增强了学习效果。
内容概要:本文详细介绍了滑模变结构控制的基本理论及其在MATLAB环境下的仿真实现。首先解释了滑模变结构控制的概念,即系统结构随状态变化而切换,以达到理想的动态性能。文中通过具体的二阶系统实例展示了如何构建状态空间模型、设计滑模面和控制律,并利用MATLAB进行了详细的仿真验证。此外,还探讨了滑模控制中的关键问题,如抖振现象的处理、参数选择的原则以及面对不确定性和扰动时的鲁棒性表现。 适合人群:自动化专业学生、控制系统工程师、从事控制理论研究的研究人员。 使用场景及目标:适用于需要深入了解滑模变结构控制原理并在实践中加以应用的人群。具体应用场景包括但不限于机器人控制、航空航天、工业自动化等领域,旨在提高系统的稳定性和抗干扰能力。 其他说明:文章提供了丰富的MATLAB代码片段,帮助读者更好地理解和掌握滑模变结构控制的实际操作步骤。同时强调了在实际应用中需要注意的技术细节,如计算步长的选择、参数优化等。
内容概要:本文详细介绍了基于Zynq平台的以太网传输框架,涵盖从FPGA数据采集、DMA传输到DDR存储,再到通过千兆网传输给电脑的全过程。框架通过高效的DMA技术和合理的软硬件协同设计,实现了快速、可靠的数据传输。文中不仅提供了具体的VHDL、Verilog和C代码示例,还分享了实际应用中的经验教训和技术细节,如内存对齐、中断处理和网络带宽控制等。 适合人群:适用于嵌入式系统开发人员、FPGA工程师、模拟半导体芯片测试工程师以及相关专业的师生。 使用场景及目标:主要用于需要高效数据传输的应用场景,如模拟数字转换器(ADC)、数字模拟转换器(DAC)的数据采集与传输,摄像头数据回传,声呐采集等。目标是提高开发效率,减少开发周期,使开发者能够集中精力在特定功能的实现上。 其他说明:文章强调了框架的实际应用效果,如降低内存拷贝耗时、提高网络吞吐量、减少CPU占用率等,并提供了一些实用的调试和优化技巧。配套的工程文件和详细的文档支持进一步增强了其实用性和易用性。
内容概要:本文详细介绍了基于MATLAB的改进带记忆模拟退火算法求解旅行商问题(TSP)的方法。首先,针对传统模拟退火算法存在的收敛速度慢、易陷入局部最优的问题,提出了两种主要改进措施:一是引入多普勒型降温曲线,使算法在早期能够广泛搜索解空间,后期聚焦于局部优化;二是增加了记忆功能,记录迭代过程中找到的最优解,防止算法陷入局部最优。文中提供了具体的MATLAB代码实现,并展示了该算法在中国31城、64城、144城及att48城市数据集上的测试结果,表明改进后的算法显著提高了求解效率和准确性。 适合人群:对TSP问题及其解决方案感兴趣的科研人员、算法开发者、学生。 使用场景及目标:适用于需要高效求解大规模TSP问题的实际应用场合,如物流配送路径规划、电路板钻孔路径优化等领域。目标是通过改进的模拟退火算法快速找到全局最优解或近似最优解。 其他说明:文章不仅提供了详细的理论解释和技术细节,还包括了完整的MATLAB代码实现和测试实例,方便读者理解和实践。此外,还提到了一些实用的调参技巧,帮助用户更好地调整算法参数以适应不同规模和复杂度的问题。
Delphi 12.3控件之DDevExtensions290.zip
内容概要:本文详细介绍了如何利用Blender和Python为污水处理厂创建高精度3D渲染效果图及其背后的参数化建模方法。首先,作者展示了如何通过Python代码管理复杂的设备数据结构(如嵌套字典),并将其应用于3D模型中,确保每个工艺段的设备参数能够准确反映在渲染图中。接着,文章深入探讨了具体的材质处理技巧,比如使用噪声贴图和溅水遮罩来增强金属表面的真实感,以及如何优化渲染性能,如采用256采样+自适应采样+OpenImageDenoise的降噪组合拳,将渲染时间缩短至原来的三分之一。此外,文中还涉及到了一些高级特性,如通过Houdini的粒子系统模拟鸟类飞行路径,或者利用Three.js实现交互式的在线展示。最后,作者强调了参数化建模的重要性,它不仅提高了工作效率,还能更好地满足客户需求,尤其是在面对紧急的设计变更时。 适合人群:从事污水处理工程设计的专业人士,尤其是那些希望提升自己3D建模技能和提高工作效率的人。 使用场景及目标:适用于需要快速生成高质量污水处理厂设计方案的场合,特别是在投标阶段或向客户展示初步概念时。通过这种方式,设计师可以在短时间内制作出逼真的效果图,帮助客户直观理解设计方案,并且可以根据客户的反馈迅速调整模型参数,从而加快决策过程。 其他说明:除了技术细节外,本文还分享了许多实用的经验和技巧,如如何平衡美观与效率之间的关系,以及怎样应对实际项目中的各种挑战。对于想要深入了解这一领域的读者来说,这是一份非常有价值的学习资料。
内容概要:本文详细介绍了车辆路径优化(VRP)的不同变种及其应用场景,如冷链物流VRP、带时间窗的VRP(VRPTW)、多配送中心VRP(MDVRP)以及电动车路径优化(EVRP)。文中不仅探讨了这些优化问题的基本概念和特点,还展示了如何利用遗传算法、蚁群算法、粒子群算法等多种智能优化算法来解决这些问题。特别地,针对冷链物流路径优化,文章提出了改进的遗传算法,通过引入大规模邻域搜索(LNS)和多目标优化方法,实现了更好的优化效果。此外,文章还提供了具体的MATLAB代码示例,帮助读者更好地理解和实现这些算法。 适合人群:对物流与路径优化感兴趣的科研人员、工程师和技术爱好者,尤其是那些希望深入了解VRP及其变种问题的人士。 使用场景及目标:适用于物流配送公司、电商平台、冷链物流公司等需要优化配送路径的企业。主要目标是通过合理的路径规划,减少运输成本、提高配送效率和服务质量,特别是在冷链物流中确保货物品质的同时降低运营成本。 其他说明:文章强调了不同算法在实际应用中的优劣比较,并指出在处理大规模问题时,改进后的遗传算法表现出显著优势。同时,文章还提供了一些实用的编程技巧和注意事项,有助于读者在实践中取得更好的优化结果。
内容概要:本文介绍了如何使用贝叶斯优化算法优化LSTM模型的隐含层个数、学习率和正则化参数,以提高多特征输入单输出的二分类或多分类任务的性能。文中详细展示了使用Matlab实现这一过程的具体步骤,包括数据准备、LSTM模型定义、贝叶斯优化设置、目标函数实现以及结果可视化等方面的内容。通过这种方法,不仅能够显著减少手动调参的时间成本,还能有效提升模型的分类准确性。 适合人群:对机器学习尤其是深度学习有一定了解的研究人员和技术开发者,特别是那些希望深入了解LSTM模型调参技巧的人群。 使用场景及目标:适用于需要处理序列数据或多特征输入的分类任务,旨在通过自动化调参手段获得更优的模型性能。具体应用场景包括但不限于医疗时序数据分析、地震预测、轴承故障诊断等领域。 其他说明:文中提供的代码模板可以直接应用于类似的任务中,只需根据实际情况调整输入数据即可。此外,作者还分享了一些实用的小贴士,如数据预处理方法、避免常见陷阱等,帮助读者更好地理解和应用所介绍的技术。
内容概要:本文详细介绍了利用Matlab实现低秩矩阵分解的方法,特别针对图像和信号处理中的杂波去除问题。文中首先解释了为何选择低秩矩阵分解这一方法,即很多实际数据矩阵虽然看起来复杂,但实际上具有低维结构,可以通过分解为低秩矩阵和稀疏矩阵来分别表示主要结构和杂波。接着展示了具体的Matlab代码实现,包括参数设置、初始化、迭代更新规则以及收敛条件的检查。此外,还提供了多个应用场景的具体实例,如处理含噪图像、老照片修复等,并讨论了一些优化技巧,如采用随机SVD提高效率。 适合人群:从事图像处理、信号处理的研究人员和技术开发者,尤其是对低秩矩阵分解感兴趣的学者。 使用场景及目标:适用于需要从含噪数据中提取有用信息的各种场合,如医学影像、遥感图像、音频信号等领域。目的是通过去除杂波,提高数据质量,增强后续分析的有效性和准确性。 其他说明:文中不仅给出了完整的代码示例,还深入探讨了各个步骤背后的数学原理,帮助读者理解算法的工作机制。同时提醒使用者注意处理大规模数据时可能出现的问题及解决方案。
AGI智能时代2025让DeepSeek更有趣更有深度的思考研究分析报告24页.pdf
内容概要:本文详细介绍了基于集成模型的LSBoost算法在时间序列预测中的应用及其Matlab代码实现。首先解释了LSBoost算法的基本原理,即通过迭代训练一系列弱学习器并将其组合成强学习器,从而提高预测精度。接着展示了具体的Matlab代码实现步骤,包括数据生成与划分、LSBoost训练过程、预测与误差计算等。文中还讨论了实际应用中的注意事项,如滑动窗口机制、特征工程技巧、参数调优策略等。此外,提供了多种改进方法,如加入滞后项和移动平均交叉项、使用递归预测、模型融合等,以应对不同类型的时序数据。 适合人群:对时间序列预测感兴趣的科研人员、工程师和技术爱好者,尤其是有一定Matlab编程基础的人群。 使用场景及目标:适用于需要处理非平稳、波动剧烈的时间序列数据的场景,如电力负荷预测、金融数据分析等。主要目标是帮助读者掌握LSBoost算法的实现方法,提高时间序列预测的准确性和鲁棒性。 其他说明:文中提供的代码和技巧可以帮助读者更好地理解和应用LSBoost算法,同时强调了特征工程和模型融合的重要性。
内容概要:本文详细探讨了永磁同步电机(PMSM)控制系统中滑模观测器(SMO)与锁相环(PLL)相结合的技术,尤其关注相位补偿的应用。文中首先介绍了SMO的基本原理及其存在的高频抖动问题,随后提出了通过PLL进行相位补偿的方法,解决了观测波形与实际波形之间的相位滞后问题。通过加入比例积分补偿器,进一步提高了系统的稳定性和精确度。实验结果显示,在加入相位补偿后,观测波形与实际波形基本重合,转速估计更加平稳,三相电流波形也变得圆润对称。 适用人群:从事电机控制研究与开发的工程师和技术人员,尤其是对永磁同步电机控制有一定了解并希望深入理解滑模观测器和PLL相位补偿机制的人士。 使用场景及目标:适用于需要提高PMSM控制系统精度和稳定性的场合,如工业自动化设备、电动汽车驱动系统等。主要目标是解决滑模观测器输出波形与实际波形之间的相位滞后问题,从而提升整个系统的性能。 其他说明:文章提供了详细的代码片段和调试技巧,帮助读者更好地理解和实施相关技术。同时提醒了一些常见的调试陷阱,如补偿量过大导致的过冲现象以及低速时的特殊处理方式。
内容概要:本文详细介绍如何利用MATLAB实现基于随机森林算法的数据分类。主要内容涵盖数据准备、代码实现、模型训练、预测评估及数据更换方法。文中提供了详细的代码解释,包括数据读取、特征提取、随机森林分类器创建、预测和评估分类结果等步骤。此外,还附有运行视频,帮助初学者更好地理解和掌握整个流程。文章强调了随机森林算法的优势及其在处理复杂分类问题中的高效性。 适合人群:具有一定MATLAB基础,希望学习和应用随机森林算法进行数据分类的研究人员和开发者。 使用场景及目标:适用于需要对大量数据进行分类的任务,特别是当数据来源为Excel文件时。目标是通过随机森林算法提高分类准确性,同时提供可视化的特征重要性和分类效果展示。 其他说明:文章不仅提供了完整的代码实现,还包括一些实用的小技巧,如处理缺失值、调整模型参数以防止过拟合、应对类别不平衡等问题。此外,还提到了如何通过特征重要性图表来优化特征选择。
编程宝典,主要用来学习编程知识和逻辑
内容概要:本文详细介绍了使用COMSOL进行变压器磁致伸缩引发的振动噪声的多物理场仿真过程。主要内容涵盖变压器的电路磁场分布仿真、磁致伸缩引起的振动数据分析、受力分布研究以及噪声分布模拟。通过具体代码示例,阐述了如何设置绕组电流激励、定义磁致伸缩系数、计算受力情况并模拟噪声传播。仿真结果显示,铁芯的某些部位因磁致伸缩效应显著且结构刚度较弱,振幅较大;铁芯边缘和绕组端部受力较大;噪声强度在靠近变压器区域较高,随距离增加而衰减。这些结果有助于优化变压器设计,减少振动噪声。 适合人群:从事电力系统设备设计、制造及维护的技术人员,尤其是对变压器性能优化感兴趣的工程师。 使用场景及目标:适用于希望深入了解变压器内部物理机制的研究人员和技术人员,旨在通过仿真手段优化变压器设计,降低振动噪声,提高设备稳定性和效率。 其他说明:文中提供了多个具体的MATLAB代码片段,用于指导读者如何在COMSOL中实现各项仿真任务。此外,还强调了一些仿真过程中需要注意的关键点,如材料属性设置、边界条件的选择等。
内容概要:本文详细介绍了基于模型预测控制(MPC)的燃料电池混合动力系统能量管理策略的MATLAB实现。文章涵盖了目标函数的设计,特别是引入了动力系统性能衰退的因素,使得能量管理更加全面和有效。此外,文中展示了两种预测方式(BP神经网络和LSTM)及其切换机制,确保了预测的灵活性和准确性。同时,文章讨论了SOC始末一致性的调节方法,以及不同工况下的适应性和优化措施。通过实际案例验证,该策略显著提升了燃料电池的使用寿命和系统效率。 适合人群:从事新能源汽车研究的技术人员、高校师生及相关领域的研究人员。 使用场景及目标:适用于燃料电池混合动力系统的能量管理研究与开发,旨在提高系统的性能、效率和能源利用率,延长燃料电池的使用寿命。 其他说明:文中提供的代码片段和详细的解释有助于读者理解和应用该策略,同时也鼓励读者根据自身需求进行改进和优化。