Great! Yeah, column queries are quite handy. 

> On Sep 30, 2025, at 6:40 PM, Ricardo Parada <[email protected]> wrote:
> 
> I tested it as follows:
> 
> Expression e = FunctionExpressionFactory.lowerExp("name”);
> 
> StringProperty<String> LOWER_NAME = PropertyFactory.createString("lowerName", 
> e, String.class);
> String lowerName = ObjectSelect.columnQuery(Artist.class, LOWER_NAME)
>               .where(LOWER_NAME.eq("leonardo da vinci"))
>               .selectFirst(context);
>               
> System.out.println("Lower name is " + lowerName);
> 
> 
>> On Sep 30, 2025, at 5:42 PM, Ricardo Parada <[email protected]> wrote:
>> 
>> Thank you Andrus,
>> 
>> I had figured it out.  I’m finding the API easier to work with than EOF.
>> 
>> I like that these expressions can then be used with 
>> ObjectSelect.columnQuery() etc. and I don’t have to attach them to the 
>> entities like we did with EOF using derived attributes.
>> 
>> Regards,
>> Ricardo
>> 
>> 
>> 
>>> On Sep 29, 2025, at 2:43 PM, Andrus Adamchik <[email protected]> wrote:
>>> 
>>> One way is to use ExpressionFactory to further build the expression, but it 
>>> is kinda ugly. Let me rather give a very compact property-based example:
>>> 
>>> Expression e = MyEntity.DELTA.abs().gt(10)
>>> 
>>> Should've thought of that before :)
>>> 
>>> Andrus
>>> 
>>> 
>>>> On Sep 26, 2025, at 12:54 PM, Ricardo Parada <[email protected]> 
>>>> wrote:
>>>> 
>>>> 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
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to