2015-08-25 18 views
5

Çoğu zaman, benim varlıklarımda @Formula kullanıyorum. Ama her zaman basit bir sorgu ya da tablodan dosyalandırabileceğim parametre ile saklı yordamdı. Şimdi ilgili nesneden bazı mülkleri kullanmalıyım. Ama DB'den nesne almaya çalışırken istisna görüyorum. Lütfen aşağıdaki formun altındaki bir örneğe bakın: @Formula.Hazırlık alanı @ Formula'da varlık alanı nasıl kullanılır?

formül geçerli bir SQL fragmanının

Yani olmak zorunda: Ben göreceksiniz size Formula ait Javadoc okursanız

select d.ministry.id from Department d ... 

cevap

5

gibi bir şey yazmak istemiyorum gibi SQL kullanmanız gerekecek:

@Formula("test_package.calc_something(" 
      + "select DEP.MINISTRY_ID from DEPARTMENT DEP where DEP.ID = DEPARTMENT_ID" 
     + ")") 
private BigDecimal someMetric; 

SQL'de yazmadan önce parçadaki Hazırda Bekletme tarafından değiştirilen tek şey: Bu, tablo takma adlarını sütunlarınıza ekleyecektir (bunu tahmin edemeyeceğiniz gibi). Sadece karmaşık bir SQL ayrıştırıcısının kullanıldığı için, daha karmaşık parçalar için takma adı yanlış konumlara yerleştireceğinden bahsederim.

performansı hakkında bir açıklama: formül size sadece sıralama veya (sadece öznitelik adından tahmin) filtreleme için özellik kullanmak isteyen bile yük her Department varlık için yürütülür - Kullanmak sürece @Basic(fetch = FetchType.LAZY) ve bytecode instrumentation'u açın (veya FieldHandled ile öykünerek).

+0

Yanıtladığınız için teşekkür ederiz. Ama ben kötü bir örnek yazdım. Görev, ilgili nesnelerin parametrelerini almaktır. Örnek güncelledim. Şimdiden teşekkürler. – Dmitry

İlgili konular