Yes, custom functions and operators should work in the WHERE clause too
where(TestJson.JSON.operator("->>", String.class, "test").eq("123"))
There won't be as much flexibility as in builtin functions though.
On Tue, Oct 13, 2020 at 11:56 AM Andrus Adamchik <[email protected]> wrote:
>
> To expand a bit, Cayenne basically provides a way to map DB-specific JSON
> columns to "org.apache.cayenne.value.Json". This gives a (hopefully) smooth
> experience reading and writing such values. How to use it:
>
> 1. Ensure your DB supports native JSON type (e.g. Postgres)
> 2. Map your DbAttribute as type "OTHER"
> 3. Map your ObjAttribute as "org.apache.cayenne.value.Json"
>
> 2 & 3 would happen automatically on reverse-engineering if you are using
> DB-first flow. "org.apache.cayenne.value.Json" is simply a String wrapper. It
> intentionally doesn't have any parsing logic. Its purpose is to be a
> performant dependency-free container to pass JSON payload between the app and
> DB. If you need JSON as a tree, you may take a few more steps:
>
> 4. Pick a JSON parser such as Jackson.
> 5. Map ObjAttribute as a type supported by that parser (e.g. JsonNode in
> Jackson)
> 6. Write and register a custom "ValueObjectType<JsonNode, Json>" [1]
> 7. There is even a way to use DB-specific functions to query JSON [2]
>
> @Nikita: is it possible to apply custom functions in the WHERE clause as well?
>
> Andrus
>
> [1] https://cayenne.apache.org/docs/4.2/cayenne-guide/#value-object-type
> <https://cayenne.apache.org/docs/4.2/cayenne-guide/#value-object-type>
> [2]
> https://github.com/apache/cayenne-examples/blob/master/cayenne-jdbc-type-other/src/main/java/org/apache/cayenne/demo/JsonTestCommand.java#L59
>
>
>
> > On Oct 13, 2020, at 11:07 AM, Nikita Timofeev <[email protected]>
> > wrote:
> >
> > Hi Markus,
> >
> > No docs for that yet, but here's an example of new types usage:
> >
> > https://github.com/apache/cayenne-examples/tree/master/cayenne-jdbc-type-other
> >
> > On Tue, Oct 13, 2020 at 10:41 AM Markus Reich <[email protected]>
> > wrote:
> >>
> >> Hi Andrus,
> >>
> >> is there an example or doc for the support of JSON types?
> >>
> >> regards
> >> Meex
> >>
> >> Am Di., 13. Okt. 2020 um 08:48 Uhr schrieb Andrus Adamchik <
> >> [email protected]>:
> >>
> >>> 4.2.M2 release is out [1]. A few cool things in this release:
> >>>
> >>> * Support for JSON and geospatial value types.
> >>> * Ordering on aggregate functions and in-memory evaluation of aggregate
> >>> expressions.
> >>> * Modeler support for downloading JDBC drivers from maven central.
> >>> * Runtime changes that may be less obvious to the end user, but allow to
> >>> handle a variety of edge cases.
> >>> * Bug fixes
> >>>
> >>> Also looks like we are pretty close to beta freeze. The main scope of 4.2
> >>> is done, though of course improvement ideas keep popping up all the time,
> >>> especially now that the new stack significantly expanded our SQL
> >>> vocabulary
> >>> and JDBC capabilities. E.g. one such idea is using EXISTS instead of JOIN
> >>> +
> >>> DISTINCT for to-many conditions [2].
> >>>
> >>> Enjoy M2!
> >>>
> >>> Andrus
> >>>
> >>> [1] https://cayenne.apache.org/2020/10/cayenne-42m2-released/
> >>> [2] https://issues.apache.org/jira/browse/CAY-2684
> >>
> >>
> >>
> >> --
> >> *Markus Reich*
> >> Waldweg 62
> >> 6393 St. Ulrich am Pillersee
> >> www.markusreich.at / www.meeximum.at
> >> [email protected]
> >
> >
> >
> > --
> > Best regards,
> > Nikita Timofeev
>
--
Best regards,
Nikita Timofeev