我在数据库(Postgres 11)中有一个带有列的表“ greetings”: 语言,translation_string,文本
和对象类型枚举“语言”(“ 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;
}
}
我的TranslationRepository.class
@Repository
public interface TranslationRepository extends JpaRepository<Greeting, GreetingIdentity> {
Greeting getGreetingByIdentity(GreetingIdentity identity);
}
我的Greeting.class
@Data
@Entity
@Table(schema = "common", name = "greetings")
public class Greeting {
@EmbeddedId
private GreetingIdentity id;
@Column(name = "text")
private String text;
}
我的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();
}
}
在DB中用枚举类型调用translationRepository.getGreetingByIdentity(Language.getDefaultLocale(),“新年格里特”)失败,并出现上述错误... 我在做什么错了?