Hi Sanne, Le lundi 15 août 2011 à 16:48 +0100, Sanne Grinovero a écrit :
> Regarding queries, you can use it with Hibernate Search as we did in a > demo at JBoss World [1], that doesn't provide all power of relational > queries but can still deal with most needs (and full text queries as > well); the only thing you have to consider is to use Well; the application for which I'm experimenting with OGM/Infinispan requires a synchronous search behaviour (which is, once a write transaction completes, subsequent 'read' transactions must show immediately the modified state). A previous implementation of the service currently struggles, because it attempts to expect this from SOLR (meep! wrong). Eventually relying on Lucene again won't buy me much here :) As both OGM-21 (no JP-QL) and OGM-8 (no Criteria Queries either) block me, and before temporarily retreating on JPA(Hibernate)+Postgres, I've played with sketching a very early implementation of CQ support. Not much, not properly tested, nothing, but enough to get a my single use case somewhat working: /* with @Entity public class Document { @Id @GeneratedValue(generator = "uuid") @GenericGenerator( name="uuid", strategy = "uuid2") String internalUuid; @NaturalId private String docuid; public String title; } */ CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Document> cq = cb.createQuery(Document.class); Root<Document> clRoot = cq.from(Document.class); cq.select(clRoot).where(cb.equal(clRoot.get("docuid"), uid)); /* List<Document> docs = em.createQuery(cq).getResultsList(); */ List<Document> docs = TypedCriteriaQueryFactory .createTypedQuery(em, cq).getResultList(); caveats: * apparently, Infinispan's Distributed Execution Framework requires the clustering mode to be "distribution"; "replication" ought to be fine too, but the engine seems to have strong opinion against this. * only the simplest queries have a chance to work * a full scan on the whole ENTITIES cache is going to happen on every query. And then an individual load(by @Id) on each matched entity. * for the moment, this is implemented as external code, rather than a proper patch. Hence a fairly ugly "ClandestineAccess" class. I guess a more correct implementation will have to find a better way to bounce from OgmEntityManager down to the InfinispanDialect, but for now Session seems to have a fairly strong opinion that the query world is about JDBC and HQL->SQL translations only. * Apparently, sometimes the ghost of a previous instance is detected by Infinispan which then fails because of a remote invocation error. I guess this is more an issue with eclipse starting new sessions before killing the previous one. With that said, I can now proceed! -- Cyrille
_______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev