Re: Derived attribute
Ricardo Parada <[email protected]> Fri, 26 Sep 2025 12:54:43 -0400
| Newsgroups | gmane.comp.java.cayenne.user |
|---|---|
| Message-ID | <[email protected]> |
Thank you Andrus, How would I do a query to fetch all where absDelta > 10 for example? > On Sep 26, 2025, at 12:16=E2=80=AFPM, Andrus Adamchik = <[email protected]> wrote: >=20 > Hi Ricardo, >=20 > "defaultValueExpression" is a hallucination. There's nothing like that = in Cayenne :) Taking it out of the model and into Java will work: >=20 > 1. A getter (like you mentioned) : >=20 > public BigDecimal getAbsDelta() { > return getDelta().abs(); > } >=20 > 2. An expression for WHERE: >=20 > Expression e =3D FunctionExpressionFactory.absExp("delta"); >=20 > 3. An ordering: >=20 > Ordering o =3D new Ordering(e); >=20 > Thanks, > Andrus >=20 >=20 >=20 >> On Sep 26, 2025, at 10:48=E2=80=AFAM, Ricardo Parada = <[email protected]> wrote: >>=20 >>=20 >> Hello, >>=20 >> I=E2=80=99m looking into what we should do with derived attributes we = have defined in our EOF object models after migrating to Cayenne.=20 >>=20 >> I would like to be able to use the derived attribute in queries in = the where clause and order by clause.=20 >>=20 >> For example, if my entity has a DELTA column and a derived column = ABS_DELTA that uses ABS(DELTA) expression when fetching it or when used = in the where clause or order by clause.=20 >>=20 >> ChatGPT suggested using defaultValueExpression as one of the options = but cautioned it would not work with 5.0-M1. Something like this: >>=20 >> <db-entity name=3D"MY_ENTITY" schema=3D"public"> >> <db-attribute name=3D"ID" type=3D"INTEGER" isPrimaryKey=3D"true" = isMandatory=3D"true"/> >> <db-attribute name=3D"DELTA" type=3D"DECIMAL"/> >> <db-attribute name=3D"ABS_DELTA" type=3D"DECIMAL" = isGenerated=3D"true"> >> <defaultValueExpression>ABS(DELTA)</defaultValueExpression> >> </db-attribute> >> </db-entity> >>=20 >> <obj-entity name=3D"MyEntity" className=3D"com.example.model.MyEntity" = dbEntityName=3D"MY_ENTITY"> >> <obj-attribute name=3D"id" type=3D"java.lang.Integer" = db-attribute-path=3D"ID"/> >> <obj-attribute name=3D"delta" type=3D"java.math.BigDecimal" = db-attribute-path=3D"DELTA"/> >> <obj-attribute name=3D"absDelta" type=3D"java.math.BigDecimal" = db-attribute-path=3D"ABS_DELTA"/> >> </obj-entity> >>=20 >> It also mentioned using something like this: >>=20 >>=20 >> Property.create("absDelta", BigDecimal.class).alias("ABS(DELTA)"). >> Does anybody have any suggestions or recommendations? I would prefer = something that works with 5.0-M1 since by the time we do this migration = I=E2=80=99m thinking we would use the latest version which will be 5.0 = by that time. =20 >>=20 >> I think that something that allows me to use the derived columns in = the where and order by clause. In most cases it would be okay to = additionally write the logic in Java so that in-memory sorting / = filtering works. For example, a getAbsDelta() that returns = Math.abs(getDelta()).=20 >>=20 >>=20 >>=20 >> Thank you >>=20 >> Ricardo Parada >=20