У меня есть таблица "привет" в моей БД (Postgres 11) со столбцами:
язык, перевод_строка, текст
и тип объекта enum "language" ('en', 'ru')
Цель - получить текст в нужной локали.
У меня есть некоторые заполненные данные на "привет"
+---------------+------------------------+-----------------------+
| language | translation_string | text |
|(enum language)|(varchar) (primary key) | (varchar) |
|(primary key) | | |
+---------------+------------------------+-----------------------+
| en | new year greting | Happy New Year! |
| ru | new year greting | С Новым Годом! |
+---------------+------------------------+-----------------------+
Я не могу правильно отобразить данные и получить «не удалось извлечь ResultSet; SQL [n / a]; вложенное исключение - org.hibernate.exception.SQLGrammarException: не удалось извлечь ResultSet». Также у меня есть составной футляр для ключей, и это усложняет ситуацию.
Я изменил тип столбца в тестовой БД на VARCHAR, и он отлично работает. Но я не могу сделать это в рабочей базе данных ...
Мой язык перечислений:
public enum Language {
en, ru;
public static Language getDefaultLocale(){
return ru;
}
}
My TranslationRepository.class
@Repository
public interface TranslationRepository extends JpaRepository<Greeting, GreetingIdentity> {
Greeting getGreetingByIdentity(GreetingIdentity identity);
}
My Greeting.class
@Data
@Entity
@Table(schema = "common", name = "greetings")
public class Greeting {
@EmbeddedId
private GreetingIdentity id;
@Column(name = "text")
private String text;
}
My GreetingIdentity.class
@Embeddable
public class GreetingIdentity implements Serializable {
@NotNull
@Enumerated(EnumType.ORDINAL)
private Language lang;
@NotNull
private String translation_string;
public GreetingIdentity(@NotNull String translation_string) {
this.lang = Language.getDefaultLocale();
this.translation_string = translation_string;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
GreetingIdentity that = (GreetingIdentity) obj;
if (!lang.equals(that.lang)) return false;
return translation_string.equals(that.translation_string);
}
@Override
public int hashCode() {
int result = lang.hashCode();
return 31 * result + translation_string.hashCode();
}
}
вызов translationRepository.getGreetingByIdentity (Language.getDefaultLocale (), "новый год") с типом enum в БД завершается с ошибкой, упомянутой выше ...
Что я делаю не так?