Thank you Andrus, How would I do a query to fetch all where absDelta > 10 for example?
> On Sep 26, 2025, at 12:16 PM, Andrus Adamchik <[email protected]> wrote: > > Hi Ricardo, > > "defaultValueExpression" is a hallucination. There's nothing like that in > Cayenne :) Taking it out of the model and into Java will work: > > 1. A getter (like you mentioned) : > > public BigDecimal getAbsDelta() { > return getDelta().abs(); > } > > 2. An expression for WHERE: > > Expression e = FunctionExpressionFactory.absExp("delta"); > > 3. An ordering: > > Ordering o = new Ordering(e); > > Thanks, > Andrus > > > >> On Sep 26, 2025, at 10:48 AM, Ricardo Parada <[email protected]> wrote: >> >> >> Hello, >> >> I’m looking into what we should do with derived attributes we have defined >> in our EOF object models after migrating to Cayenne. >> >> I would like to be able to use the derived attribute in queries in the where >> clause and order by clause. >> >> 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. >> >> ChatGPT suggested using defaultValueExpression as one of the options but >> cautioned it would not work with 5.0-M1. Something like this: >> >> <db-entity name="MY_ENTITY" schema="public"> >> <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" >> isMandatory="true"/> >> <db-attribute name="DELTA" type="DECIMAL"/> >> <db-attribute name="ABS_DELTA" type="DECIMAL" isGenerated="true"> >> <defaultValueExpression>ABS(DELTA)</defaultValueExpression> >> </db-attribute> >> </db-entity> >> >> <obj-entity name="MyEntity" className="com.example.model.MyEntity" >> dbEntityName="MY_ENTITY"> >> <obj-attribute name="id" type="java.lang.Integer" db-attribute-path="ID"/> >> <obj-attribute name="delta" type="java.math.BigDecimal" >> db-attribute-path="DELTA"/> >> <obj-attribute name="absDelta" type="java.math.BigDecimal" >> db-attribute-path="ABS_DELTA"/> >> </obj-entity> >> >> It also mentioned using something like this: >> >> >> 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’m >> thinking we would use the latest version which will be 5.0 by that time. >> >> 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()). >> >> >> >> Thank you >> >> Ricardo Parada >
