Hi,

In Cayenne 4.2+ you could use PK properties for that, but you need to
generate them first, as it's a new option in the cgen configuration.

Once you got them in your classes, you could use them to evaluate in
memory:

Expression exp =
Painting.TO_ARTIST.dot(Artist.ARTIST_ID_PK_PROPERTY).getExpression();
// exp is just ExpressionFactory.dbIdPathExp("toArtist.ARTIST_ID") in case
you can't run cgen
Object id = exp.evaluate(painting);

as a bonus you could use these properties in queries to fetch FKs directly
(Cayenne is smart enough in this case to not use join):

List<Long> ids = ObjectSelect.query(Painting.class)
    .column(Painting.TO_ARTIST.dot(Artist.ARTIST_ID_PK_PROPERTY))
    .select(context);

Hope this helps.

On Thu, Sep 18, 2025 at 12:38 PM Tore Halset <[email protected]> wrote:

> Hello.
>
> With the following many-to-on relationship: Painting<<-->Artist. There is
> an ARTIST_ID column in the PAINTING-table.
>
> Having one Painting object, is it possible to get the ARTIST_ID value from
> the painting row without fetching the Artist? Normally, I would just follow
> the painting.getArtist().getId(), but for this case, I just want the artist
> id for performance reasons.
>
> I have tried to just map up artistId in the ObjEntity of Painting, but
> that returned just null. I have also tried readPropertyDirectly, but do nok
> know how to extract the ARTIST_ID from that.
>
>  - Tore.



-- 
Best regards,
Nikita Timofeev

Reply via email to