Re: this works, but is there a better way?

Andrus Adamchik <[email protected]> Tue, 7 Apr 2026 08:41:15 -0400
Newsgroups gmane.comp.java.cayenne.user
Message-ID <[email protected]>
Oh, I got it. There are no special Cayenne shortcuts for this. So you'll =
have to use your own conventions =
(AiSystemPromptSummarization.class.getSimpleName(), or define possible =
constants in a custom enum).

Andrus



> On Apr 7, 2026, at 8:27=E2=80=AFAM, Robert A. Decker =
<[email protected]> wrote:
>=20
> In my query I'm using a hardcoded string but if I change the qualifier =
in the cayenne modeler to, for example, use a different column or change =
the string in the qualifier it won't match the query.=20
>=20
> So, I should use the actual qualifier from the modeler but I don't see =
the qualifier in the class variables. Does it only live in the modeler?
>=20
> Basically I just don't want to use a string that I have in my code.  I =
could use something like just the class name of the class but that may =
not match the qualifier.=20
>=20
> Rob
>=20
> Sent from my iPhone
>=20
>> On Apr 7, 2026, at 14:04, Andrus Adamchik <[email protected]> =
wrote:
>>=20
>> =EF=BB=BFHi Rob,
>>=20
>> In your example, both the entity qualifier and the condition in =
"where" seem the same. So you wouldn't need the latter if you have the =
former. Am I misreading the description?
>>=20
>> Andrus
>>=20
>>> On Apr 7, 2026, at 7:48=E2=80=AFAM, Robert A. Decker =
<[email protected]> wrote:
>>>=20
>>> I'm using single-table inheritance with the 'type' column =
determining the subclass with a Qualifier in the model:
>>> AiSystemPrompt (abstract)
>>> AiSystemPromptSummarization (Qualifier =
type=3D'AiSystemPromptSummarization')
>>>=20
>>> This query works:
>>>=20
>>> List<AiJob> jobs =3D ObjectSelect.query(AiJob.class)
>>> =
.where(AiJob.AI_SYSTEM_PROMPT.dot(AiSystemPrompt.TYPE).eq("AiSystemPromptS=
ummarization"))
>>> .select(context);
>>>=20
>>> But I don't like that I'm hardcoding the subclass =
("AiSystemPromptSummarization") and searching against the TYPE property.
>>>=20
>>> Is there a way to do this using the attributes I have in the cayenne =
model? (abstract superclass with concrete subclass using the qualifier =
set in the entity model)
>>>=20
>>> I looked at BaseProperty and a couple of others in =
org.apache.cayenne.exp.property but don't see it....
>>>=20
>>> Rob
>>=20