2015-08-04 2 views
0

для проекта, над которым я работаю (решение cms), у меня есть таблица, в которой хранятся все свойства веб-сайта пользователя (управляемые cms).JPA/Hibernate как сопоставить компонент, представляющий «свойства приложения»

В таблице есть этот DDL:

CREATE TABLE SITE_OPTIONS(
    OPTION_ID int generated always as identity PRIMARY KEY, 
    OPTION_NAME varchar(200) not null, 
    OPTION_VALUE text, 
    LANGUAGE_ID int not null 
) 

Это пример содержимого таблицы:

+-----------++---------------++------------------++-------------+ 
| OPTION_ID || OPTION_NAME || OPTION_VALUE  || LANGUAGE_ID | 
+-----------++---------------++------------------++-------------+ 
|   1 || SITE_TITLE || My site title ||   1 | 
+-----------++---------------++------------------++-------------+ 
|   2 || SITE_SUBTITLE || My site subtitle ||   1 | 
+-----------++---------------++------------------++-------------+ 
|   3 || TEMPLATE  || interior_designer||   1 | 
+-----------++---------------++------------------++-------------+ 

То, что я хочу, или лучше я хотел бы, как боб, которые представляют собой " siteoptions ":

public class SiteOptions{ 
    private String siteTitle; 

    private String siteSubtitle; 

    private String template; 

    //getters/setters 
} 

Я уже архитектура, основанная Repository (классическое Repository Pattern осущий), что я могу использовать для реализации функций чтения/сохранения.

Знаете ли вы, могу ли я сделать это с помощью чистого JPA/Hibernate?

Или вы когда-нибудь управляли такой ситуацией?

Заранее благодарен!

ответ

1

При сохранении SiteOptions, просто транспонировать матрицу параметров для класса сущностей, что соответствует структуре таблицы базы данных:

@Entity 
public class SiteOptionEntity { 
    @Id 
    @Column(name = "OPTION_ID") 
    private Long id; 

    @Column(name = "OPTION_NAME") 
    private String name; 

    @Column(name = "OPTION_VALUE") 
    private String value; 

    @ManyToOne 
    @JoinColumn(name = "LANGUAGE_ID") 
    private Language language; 
    ... 
} 

Конечно, используйте соответствующий генератор ID и решить, следует ли вводить отдельный Language объект (как показано выше) или использовать только идентификатор языка.

Смежные вопросы