对于我正在进行的项目(cms解决方案),我有一个表存储用户网站的所有属性(由cms管理)。
该表有这个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"的bean:
public class SiteOptions{
private String siteTitle;
private String siteSubtitle;
private String template;
//getters/setters
}
我已经有了一个基于存储库的架构(经典的存储库模式impl),我可以用它来实现读/保存功能。
你知道我是否可以用纯JPA / Hibernate来实现这个目标吗?
或者你曾经遇到过这种情况吗?
提前致谢!
答案 0 :(得分: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
实体(如上所示)或仅使用语言ID。