{"id":348,"date":"2009-06-11T20:18:00","date_gmt":"2009-06-11T20:18:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=348"},"modified":"2009-06-11T20:18:00","modified_gmt":"2009-06-11T20:18:00","slug":"jaque-version-1-5-ms-linq-expression-trees-fur-java","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2009\/06\/jaque-version-1-5-ms-linq-expression-trees-fur-java\/","title":{"rendered":"JaQue Version 1.5: MS LINQ Expression Trees f\u00fcr Java"},"content":{"rendered":"<p>Von der <a href=\"http:\/\/code.google.com\/p\/jaque\/\">Webseite<\/a>:<\/p>\n<blockquote>\n<p><a name=\"Outline\">JaQue provides an infrastructure for Microsoft <\/a><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/bb308959.aspx\">LINQ<\/a> like capabilities on Java platform. Using <a href=\"http:\/\/asm.objectweb.org\">ASM<\/a>, JaQue builds expression trees, which are used to build a query in domain specific technology or language, such as SQL. This way Java developers can focus on writing application logic in the language they know &#8211; Java, regardless what the underlying technology or language is in use. JaQue to Objects and JaQue to XML are currently supported and JaQue to JPA is under development.<\/p>\n<\/blockquote>\n<p>Ein Beispiel macht das praktisch deutlich:<\/p>\n<pre>EntityManagerFactory emf = Persistence.createEntityManagerFactory(\"hibernate\");<br \/>&nbsp; EntityManager em = emf.createEntityManager();<br \/>&nbsp; JaqueEntityManager jem = new JaqueEntityManager(em);<br \/>&nbsp; Queryable&lt;Order&gt; orders = jem.from(Order.class);<br \/><br \/>&nbsp; System.out.println(count(where(new Predicate&lt;Order&gt;() {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Boolean invoke(Order t) throws Throwable {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.getOrderID() &gt; 11000;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp; }, orders)));<\/pre>\n<p><\/p>\n<p>Wie bei LINQ soll eine eine API f\u00fcr die verschiedenen Datenquellen geben, also XML, Objekte, Datenbanken, \u2026 F\u00fcr JPA schreibt die Seite \u201cCurrently it&#8217;s able to perform only simple SELECTs, JOINs and AGGREGATEs\u201d. Das ist nat\u00fcrlich nicht viel. Insofern ist diese L\u00f6sung WEIT von den LINQ to SQL-M\u00f6glichkeiten entfernt.<\/p>\n<p><\/p>\n<p>Der Hinweis der Webseite auf \u201c<a name=\"Interoperability_with_Java_Closures\">Interoperability with Java Closures<\/a>\u201d ist nat\u00fcrlich hinf\u00e4llig. Dadurch, dass Closures aber wegfallen, wird die ganze API viel aufgebl\u00e4hter, als wenn man Closures h\u00e4tte. Die Scala-Variante ist daher auch viel k\u00fcrzer.<\/p>\n<p><\/p>\n<p>&nbsp;<\/p>\n<p><\/p>\n<p>PS: Die n\u00e4chsten 2 Wochen gibt es keine Blog-Eintr\u00e4ge, da ich ich Afrika bin.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Von der Webseite: JaQue provides an infrastructure for Microsoft LINQ like capabilities on Java platform. Using ASM, JaQue builds expression trees, which are used to build a query in domain specific technology or language, such as SQL. This way Java developers can focus on writing application logic in the language they know &#8211; Java, regardless [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[4],"tags":[],"class_list":["post-348","post","type-post","status-publish","format-standard","hentry","category-open-source"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=348"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/348\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}