일부 데이터가 여러 언어로 저장되는 프로젝트에서 작업 중입니다. 지속성을 위해 나는 Spring Data JPA를 Hibernate와 함께 사용한다. 내 모델은 다음과 같은 : 나는의 값으로 MultilingualData 것을 사용하려는 나는 또한, 클래스가JPA 매핑 열의 i18n 문제
@Embeddable
public class MultilingualData {
@Column(name = "locale", nullable = false)
@Convert(converter = LocaleConverter.class)
private Locale locale;
@Column(name = "value")
private String value;
}
그리고 :
내가 지정된 로케일에 문자열을 저장하기위한 임베디드 클래스가 Map 및 MultilingualData의 Locale을 더 나은 처리를위한 키로 사용합니다.@Entity
@Table(name = "multilingual_string")
public class MultilingualString extends BaseEntity {
private static final long serialVersionUID = -2434353448112062292L;
@ElementCollection(fetch = FetchType.EAGER)
@MapKeyJoinColumn(name = "locale", insertable = false, updatable = false)
@CollectionTable(name = "multilingual_string_map",
joinColumns = @JoinColumn(name = "string_id"))
private Map<Locale, MultilingualData> localizedStrings;
나는 MultilingualString를 사용하는 클래스 : JPA는 'multilingual_string_map'의 테이블을 생성 할 때
@Entity
@Table(name = "location")
public class Location extends BaseEntity {
private static final long serialVersionUID = 1L;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "name")
private MultilingualString name;
그래서 두 개의 열이 로케일 자체 생성됩니다. 하나는 모델에 주어진 'locale'이라는 이름이고 다른 하나는 'localized_strings_key'를 기본 키의 일부로 만듭니다. 그래서 다국어 데이터를 저장하면 로켈이 두 번 저장됩니다.
불필요한 여분의 열을 제거하고 싶습니다. 맵핑을 올바르게 구성하지 않았다는 것을 알기 때문에 누군가 내 실수를 고칠 수 있기를 바랍니다. 미리 감사드립니다.