Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 何时或为什么使用Property.forName()?_Hibernate_Hibernate Criteria - Fatal编程技术网

Hibernate 何时或为什么使用Property.forName()?

Hibernate 何时或为什么使用Property.forName()?,hibernate,hibernate-criteria,Hibernate,Hibernate Criteria,以下两者之间的区别是什么: List cats = session.createCriteria(Cat.class) .add( Restrictions.like("name", "F%") .list(); Criteria cr = session.createCriteria(User.class) .setProjection(Projections.projectionList() .add(Property.forName("id").as("id"

以下两者之间的区别是什么:

List cats = session.createCriteria(Cat.class)  
.add( Restrictions.like("name", "F%")
.list();   
Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList() 
    .add(Property.forName("id").as("id")) 
    .add(Property.forName("name").as("name"))

或者就此而言,以下两者之间的区别:

List cats = session.createCriteria(Cat.class)  
.add( Restrictions.like("name", "F%")
.list();   
Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList() 
    .add(Property.forName("id").as("id")) 
    .add(Property.forName("name").as("name"))

Property.forName(“propName”)
始终返回匹配的
属性
实例

话虽如此,这意味着问题中发布的前两个代码片段之间没有区别。当您需要在条件查询中多次使用该属性时,应使用
属性.forName(“propName”)
。这相当于使用直接编号(
如11
)或使用分配给编号的变量(
如int x=11
),并在每次需要使用编号时使用变量

有关更多详细信息,请参阅

现在,如果我谈论第二个问题(第三个和第四个代码片段),那么这两个问题的工作原理是相同的。唯一的区别在于所使用的API

在第三个代码片段中,您将获得
属性的实例
,调用其
as()
方法,该方法用于为该特定属性生成别名,并返回
SimpleProject(投影的子类)
的实例

在第四个代码片段中,您通过执行
Projections.property(“Name”)
获得了
PropertyProjection(投影的子类)
的实例


因此,在这两种情况下,您都得到了
投影的实例,您正在将其添加到
投影列表中。现在ProjectionList有两个重载方法,称为
add()
。在第三个代码段中,您正在调用
add()
,它只将
投影的实例作为参数。在第4个代码段中,您正在调用另一个版本的
add()
,它将
投影的实例作为第一个参数&
投影属性的别名作为第二个参数。因此,最终两者的工作原理是相同的。

因此,在第三个代码片段中,当我调用方法
add(Projection)
时,我也给出了别名信息。在第四个代码片段中,我通过调用方法
add(Projection,alias)
来提供别名信息。是吗?在这两种情况下都会传递别名信息。使用的API是不同的。您可以通过两种方式为属性指定别名:1。使用
Property.as(“别名”)
2。使用投影列表。添加(投影,别名)