ins*_*ity 9 hibernate hibernate-criteria
有什么区别:
List cats = session.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.list();
Run Code Online (Sandbox Code Playgroud)
和
List cats = session.createCriteria(Cat.class)
.add( Property.forName("name").like("F%") )
.list();
Run Code Online (Sandbox Code Playgroud)
或者就此而言,区别在于:
Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Property.forName("id").as("id"))
.add(Property.forName("name").as("name"))
Run Code Online (Sandbox Code Playgroud)
和
Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("id"), "id")
.add(Projections.property("Name"), "Name"))
Run Code Online (Sandbox Code Playgroud)
Property.forName("propName")总是返回匹配的Property实例.
话虽如此,意味着您的问题中发布的前两个代码段之间没有区别.您应该Property.forName("propName")在需要在Criteria或Query中多次使用该属性时使用.它相当于使用直接编号.(e.g. 11)或使用分配给no的变量.(e.g. int x = 11)并在每次需要使用no时使用变量.
有关详细信息,请参阅此处.
现在,如果我谈论第二个问题(第3和第4个代码片段),两者的工作是相同的.唯一的区别在于使用的API.
在第3个代码片段中,您将获取实例Property,调用其as()方法,该方法用于为该特定属性生成别名并返回实例SimpleProjection (subclass of Projection).
虽然在第四代码段,你得到的情况下PropertyProjection (subclass of Projection)这样做Projections.property("Name").
因此,在这两种情况下,您都会获得Projection要添加的实例ProjectionsList.现在ProjectionList有2个重载方法调用add().在第三个代码片段中,您调用的add()只是Projection作为参数的实例.在第四个代码片段中,您将调用另一个版本add(),它将Projection第一个参数和alias for the property of Projection第二个参数作为实例.所以最终两者的工作是一样的.
| 归档时间: |
|
| 查看次数: |
5691 次 |
| 最近记录: |