java - QueryDSL: JPA example for ConstructorExpression and CaseBuilder in QueryDSL 2.9.0 -


 <कोड> सार्वजनिक वर्ग ProductDTO {सार्वजनिक ProductDTO (अंतिम स्ट्रिंग नाम, अंतिम बूलियन isBrandNew) {...}} QProduct उत्पाद = QProduct.product अभिव्यक्ति & lt; बूलियन & gt; isBrandNew = नए CaseBuilder () .जब (product.creaDate.eq (product.modDate))। तो (Boolean.TRUE) .otherwise (Boolean.FALSE) .as ( "brandNewProduct") JPAQuery क्वेरी = नए JPAQuery (this.em ); query.from (उत्पाद) .where (product.name.eq ( "blah")) .listDistinct (ConstructorExpression.create (ProductDTO, product.name, isBrandNew))  

CaseBuilder है कि मेरे प्रश्न का अंतिम चयन बयान में "brandNewProduct" कॉलम शामिल हैं के लिए सही सेटअप क्या है?

अभी, सब मैं हाइबरनेट से प्राप्त अपवाद पीछा कर रहा है

  org.hibernate.hql.internal.ast.tree.ParameterNode org.hibernate.hql.internal.ast.tree.SelectExpression org.hibernate.hql.internal.ast.tree.CaseNode.getFirstThenNode (CaseNode में ढाला नहीं जा सकता भविष्य में संदर्भ के लिए ...  

किसी ने पहले ही ऐसी ही समस्या पोस्ट की है और टिमो के अनुसार, एक बग है या चलो यह कहना है कि सीतनिद्रा में लगाया गया सीमा:

सर्वोत्तम उत्तर ने जवाब दिया टिमो वेस्टकेमपर 2013-02-22T01: 55: 04-05: 00 यह वाक्यविन्यास है संभव है, लेकिन वर्तमान में हाइबरनेट द्वारा असमर्थित यहां एक संबंधित टिकट है

इसलिए, निथ्रिल द्वारा पोस्ट किए गए हल वास्तव में मेरे लिए काम करता है:

क्वेरी ()। से (बिल्ली) .सूची (बिल्ली .name.when ( "बॉब") तो (Expressions.numberTemplate (लांग, "1")) अन्यथा (Expressions.numberTemplate (लांग, "2")));।।

और मैंने इसका उपयोग समाप्त कर दिया:

  JPAQuery क्वेरी = नया जेपीएक्टीरिया (this.em); Query.from (उत्पाद) .where (product.name.eq ("blah") .listडिस्टिंक (कन्स्ट्रक्टर एक्सप्रेशन.क्रेते (उत्पादडीटीओ, उत्पाद.नाम, उत्पाद.मोदडेट। तब (उत्पाद.क्रेडाडेट)। तब (एक्सप्रेशंस .बोलीनटेम्पलेट ( "सच"))। अन्यथा (अभिव्यक्तियाँ .बोनीमान टेम्पलेट ("झूठे"))  

))

उम्मीद है कि किसी और की समस्या के मामले में यह मदद करता है। / P>


Comments