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