Локализация полей сущностей в Spring Hibernate - PullRequest
0 голосов
/ 25 июня 2019

У меня есть две сущности с полями, которые я хотел бы локализовать. Однако я не уверен, как правильно это реализовать, потому что мне нужна ссылка на сущности, а также ссылка на переведенное поле, чтобы иметь общую таблицу «i18n».

@Entity
public class EntityA {

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Translation> name;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Translation> description;

}

Вторая сущность

@Entity
public class EntityB {

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Translation> name;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Translation> shortDescription;

}

Переводчик

@Entity
@Table(name = "i18n")
public class Translation {

    private String languageCode;
    private String translation;

    //private String referenceToEntity
    //private String referenceToField


}

Существует ли какой-либо конкретный способ включить интернационализацию в полях сущностей в Spring или, по крайней мере, какой-нибудь обходной путь, чтобы он работал без лишних затрат?

1 Ответ

1 голос
/ 25 июня 2019

Я провел небольшое исследование и обнаружил аннотацию @ Convert JPA. Вам нужно будет инкапсулировать свойства name и description в объект (который реализует AttributeConverter) и использовать класс преобразования, чтобы указать, как он будет переведен, когда будет сохраняться, и как он будет переведен при получении.

Чтобы выполнить переводы с сохранением и поиском, вы можете использовать API Google переводчика .

Здесь:

@Entity
public class EntityA {

    @Convert(converter = DescriptionConverter.class)
    private Description description

    // getters and setters

},

Инкапсулированный объект, что-то вроде:

public class Description {

    private String name;

    private String language;

    private String description;

    // Getters and Setters.

}

А перевод здесь применим:

@Converter
public class DescriptionConverter implements AttributeConverter<Description, String> {

    @Override
    public String convertToDatabaseColumn(Description description) {
        // consume Google API to persist.
    }

    @Override
    public Document convertToEntityAttribute(String description) {
        // consume Google API to retrieve.
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...