(1) after much soul-searching, decide the best way to get the intersect from my 2 queries (freetext via Lucene, other criteria via Hibernate) is to get the record IDs from the Lucene search then add them into my Hibernate HQL as an extra clause. (for the 95% of people outside this niche, HQL is Hibernate's object querying language that later gets interpreted into vendor-specific SQL; and indeed is itself pretty darn similar to SQL)
(2) decide that to do it, I need to concatenate my IDs into a HQL "in" clause (which is exactly like SQL's)
(3) Write a screen of hacky dynamic HQL to do that, taking into account such niceties as null cases, different object subclasses, and batching into manageable chunks.
(4) Just as it's starting to work, realise there's a HQL parameter type that takes an IEnumerable, and I didn't need to bother with (2) or (3).
(5) Count myself lucky that I wasn't doing proper TDD like I really should have, because then I would have written twice as much pointless code
(6) Conclude that next time a client absolutely insists on prior experience of some obscure open-source API, they might have a point.
(2) decide that to do it, I need to concatenate my IDs into a HQL "in" clause (which is exactly like SQL's)
(3) Write a screen of hacky dynamic HQL to do that, taking into account such niceties as null cases, different object subclasses, and batching into manageable chunks.
(4) Just as it's starting to work, realise there's a HQL parameter type that takes an IEnumerable, and I didn't need to bother with (2) or (3).
(5) Count myself lucky that I wasn't doing proper TDD like I really should have, because then I would have written twice as much pointless code
(6) Conclude that next time a client absolutely insists on prior experience of some obscure open-source API, they might have a point.
Comment