I am unhappy with my entity-relation-namings.
The underliyng tables are named TRANSLATION and LANGUAGE.
To contains translations like
German is German in English
Deutsch is German in German
English is English in English
Englisch is English in German
I have the table
LANGUAGE
ID (int pk) <-- 1,2,3, ...
LANGTAG (varchar) <-- en / de / fr / ...
TRANSLATION
LOCAL_NAME (varchar 64) <-- German, Allemand, Deutsch, ...
Now I need relations between them. In the Entity i have both sides, the owning side and the non-owning-side.
I started using this relations:
You see two FKs:
- Translates (getter in Translations) -> Translations (getter in Language)
- Into language (getter in Translations) -> Language Translations (getter in Language)
But I inspect my Language-Entity now and see this:
private Set<Translation> translations = new LinkedHashSet<>();
@OneToMany(mappedBy = Translation.PROP_TRANSLATES)
public Set<Translation> getTranslations() {
return translations;
}
public Language setTranslations(final Set<Translation> translations) {
this.translations = translations;
return this;
}
private Set<Translation> languageTranslations = new LinkedHashSet<>();
@OneToMany(mappedBy = Translation.PROP_INTO_LANGUAGE)
public Set<Translation> getLanguageTranslations() {
return languageTranslations;
}
public Language setLanguageTranslations(final Set<Translation> languageTranslations) {
this.languageTranslations = languageTranslations;
return this;
}
I think the naming is problematic because I do not know what getter to use if I need the translations.
Intuitivly, to get the Languages that has been translated from German I use
Language german = entityManager.createCriteria("FROM Language WHERE langtag='de'");
Set<Translations> languagesInGerman = german.getLanguageTranslations();
The getter looks absolutly strange but I have no idea for a renaming!
german.getNatives()
but again I have no idea if i get a list of words translating German or a list of languages translated in german. \$\endgroup\$getLanguageNameInNativeLanguage
? There's actually a term for that: endonym (and exonym, see wiki). So,getLanguageEndonym
or something similar would look prettier, but a layman of the app doesn't understand it. If language is something important in the app, I would use the academic term. \$\endgroup\$