Property.forName("propName")
всегда возвращает вам соответствующий экземпляр Property
.
Сказав это, означает, что нет разницы между двумя первыми двумя фрагментами кода, опубликованными в вашем вопросе. Вы должны использовать Property.forName("propName")
, если вам нужно использовать это свойство несколько раз в Критерии или Запрос. Это эквивалентно использованию прямого номера. (e.g. 11
) или с помощью переменной, присвоенной no. (e.g. int x = 11
) и использовать переменную каждый раз, когда вам нужно использовать no.
Для получения дополнительной информации см. this.
Теперь, если я говорю о 2-м вопросе (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
как второй аргумент. Так что в конечном итоге работа обоих одинакова.
Итак, в третьем фрагменте, когда я вызываю метод 'add (Projection)', я также предоставляю информацию псевдонима. И в 4-м фрагменте im, предоставляя информацию псевдонима, вызывая метод 'add (Projection, alias)'. Это правильно? – insanity
Псевдоним передается в обоих случаях. Используемый API отличается. Вы можете указать псевдоним свойства двумя способами: 1. используя 'Property.as (" aliasName ")' 2. используя 'ProjectionList.add (projection, aliasName)'. – RAS