2013-07-17 19 views
7

:veya neden Property.forName() kullanıyorsunuz? arasındaki fark nedir

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

ve

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

Ya da hatta, arasındaki fark:

Criteria cr = session.createCriteria(User.class) 
    .setProjection(Projections.projectionList() 
    .add(Property.forName("id").as("id")) 
    .add(Property.forName("name").as("name")) 

ve

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

cevap

6

Property.forName("propName") her zaman size eşleşen Property örneğini döndürür.

, bu sözü sorunuzu gönderilmiş ilk iki kod snippet'ine arasında hiçbir fark yoktur demektir olması. Eğer Kriterleri veya Query o, tesisi birden çok kez kullanmak gerektiğinde Property.forName("propName") kullanmalıdır. Doğrudan no kullanımına eşdeğerdir. ( e.g. 11) veya no'ya atanan değişken kullanılarak. ( e.g. int x = 11) ve no değerini kullanmanız gereken her zaman değişkeni kullanın. Daha fazla ayrıntı için

, this bkz.

Şimdi her iki çalışma aynıdır, 2. soruya (3 & 4 kod parçacıkları) bahsedersek. Tek fark, kullanılan API'dedir. 3 kod snippet'inde

, o belirli özellik için takma üretmek için kullanılır ve SimpleProjection (subclass of Projection) bir örneğini döndürür onun as() yöntemini çağırarak, Property örneğini alıyoruz.

4. kod snippet'ini kullanırken, Projections.property("Name") yaparak PropertyProjection (subclass of Projection) örneğini alıyorsunuz. Yani ProjectionsList eklemeler yapıyoruz sen Projection örneğini alıyoruz Her iki durumda, içinde

. Şimdi ProjectionList, add() adı verilen 2 aşırı yükleme yöntemine sahip. 3. kod snippet'inde, yalnızca Projection örneğini argüman olarak alan add()'u arıyorsunuz. 4 kod parçacığı size 2 argüman olarak ilk argüman & alias for the property of Projection olarak Projection örneğini alır add() başka bir versiyonunu, diyorlar. Sonuçta her ikisi de aynı şekilde çalışıyor. Ben yöntemini çağırdığınızda

+0

Yani, 3 parçada '(Projeksiyon)' eklemek, ben de takma bilgi veriyorum. Ve 4. snippet'te, 'add (Projection, alias)' yöntemini kullanarak takma ad bilgisini verdim. Bu doğru mu? – insanity

+0

Diğer ad bilgiler her iki durumda da iletilir. Kullanılan API farklıdır. Mülkte 2 yolla takma ad verebilirsiniz: 1. Property.as ("aliasName") 'kullanarak 2.' ProjectionList.add (projection, aliasName) 'kullanarak. – RAS

İlgili konular