gpt4 book ai didi

hibernate - 什么时候或为什么要使用Property.forName()?

转载 作者:行者123 更新时间:2023-12-04 04:11:45 27 4
gpt4 key购买 nike

之间有什么区别:

List cats = session.createCriteria(Cat.class)  
.add( Restrictions.like("name", "F%")
.list();


List cats = session.createCriteria(Cat.class)  
.add( Property.forName("name").like("F%") )
.list();

或就此而言,两者之间的区别:
Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Property.forName("id").as("id"))
.add(Property.forName("name").as("name"))


Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("id"), "id")
.add(Projections.property("Name"), "Name"))

最佳答案

Property.forName("propName")始终会向您返回匹配的Property实例。

话虽如此,这意味着您的问题中发布的前两个代码段没有区别。当需要在标准查询中多次使用该属性时,应使用Property.forName("propName")。等效于使用直接号。 (e.g. 11)或使用分配给编号的变量。 (e.g. int x = 11)并在每次需要使用no时使用该变量。

有关更多详细信息,请参见this

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

在第3个代码段中,您将获取Property的实例,调用其as()方法,该方法用于为该特定属性生成别名并返回SimpleProjection (subclass of Projection)的实例。

在第4个代码段中,您通过执行PropertyProjection (subclass of Projection)获得Projections.property("Name")的实例。

因此,在两种情况下,您都将获得Projection实例,并将其添加到ProjectionsList中。现在ProjectionList有2个重载方法,称为add()。在第3个代码段中,您将调用add(),它仅将Projection的实例作为参数。在第4个代码段中,您正在调用另一个版本的add(),该版本将Projection的实例作为第一个参数,并将alias for the property of Projection的实例作为第二个参数。因此,两者的最终工作是相同的。

关于hibernate - 什么时候或为什么要使用Property.forName()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17700346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com