Hi.
Some comments on the Querydsl aspects :
Attendees: Michelle Caisse, Michael Bouschen, Craig Russell
Agenda:
1. JDOQL & Querydsl: looks interesting, along the lines of JPA except
JPA uses Java 6 APT whereas it looks like Querydsl uses a static
preprocessor. Not much of a difference; Querydsl could use the APT
approach as well. The big advantage in both approaches is compile-time
checking.
Querydsl uses Java 6 APT. But we provide support for Java 5 APT as well.
Looks simple at first glance. But what does it look like with more
complex queries like joins, projections, collection navigation, maps,
subselects, etc.? How well does it cover the JDOQL query space?
Collection and Map navigation is supported, and subselects are at least
supported in the JPAQL/HQL module, haven't tested it with JDOQL.
Examples of more complex queries will be in the tests and documentation
of the next release.
Here is a comparison of queries I posted on Linda de Michiel's JPA 2
blog
(http://blogs.sun.com/ldemichiel/entry/java_persistence_2_0_proposed#comments)
:
JPA 2 query :
QueryBuilder qb = ...
CriteriaQuery q = qb.create();
Root<Customer> cust = q.from(Customer.class);
Join<Customer, Order> order = cust.join(Customer_.orders);
Join<Order, Item> item = order.join(Order_.lineitems);
q.select(cust.get(Customer_.name))
.where(qb.equal(item.get(Item_.product).get(Product_.productType),"printer"));
Querydsl query (for HQL) :
HQLQuery query = new HQLQueryImpl(session);
QCustomer cust = QCustomer.customer;
QOrder order = QOrder.order;
QLineItem lineItem = QLineItem.lineItem;
List<String> customerNames = query.from(cust)
.innerJoin(cust.orders, order)
.innerJoin(order.lineitems, lineItem)
.where(lineItem.product.productType.eq("printer"))
.list(cust.name);
(QCustomer, QOrder and QLineItem are Querydsl metamodel types, they are
immutable and can be reused over queries)
JPAQL query :
SELECT c.name
FROM Customer c JOIN c.orders o JOIN o.lineitems i
WHERE i.product.productType = 'printer'
Compare the filter expression of JPA 2
qb.equal(item.get(Item_.product).get(Product_.productType),"printer")
with the Querydsl version
lineItem.product.productType.eq("printer")
Br,
Timo Westkämper / Mysema Ltd