我有一个java应用程序,我可以从下拉列表中选择一个对象(比方说 - 一个计算机名称)然后进行配置。对于下拉列表中的每台计算机,都需要配置不同的配置字段。我的数据库中有一个表,它将配置字段映射到comptuer。每行包含计算机名称,配置字段名称和字段类型。
例如:
computer_name | field_name | type
=======================================
test1 | ip | String
---------------------------------------
test1 | user name | String
---------------------------------------
test2 | manage_port | Number
---------------------------------------
test3 | creation_date | Date
当从UI中的下拉框中选择test1
时,用户将看到2个文本框,一个用于ip,第二个用于用户名。每个文本框都需要呈现给用户并具有检查正则表达式的验证器。选择test2
时,我想验证这确实是一个数字,还有最小值和最大值。对于test3
,我需要确保日期格式(再次使用正则表达式)。
数据库是postgres(虽然我猜解决方案应该适用于每个关系数据库)并且我正在使用Spring + Hibernate。
我的想法是为验证器创建一个验证器POJO和一个DB表,它将包含不同列中可能的所有验证。问题是,我觉得拥有空列有点多余。在java中,我想我会做一个由Validator
类,RegexValidator
类,NumberFormatValidator
类等扩展的抽象MinNumberValidator
类...但我不知道如何在DB中正确表示它(需要记住它需要映射到配置表中的每个配置行)。
有关更好设计的任何建议吗?
答案 0 :(得分:2)
Hibernate支持three types of mapping. 每个类层次结构的表,每个子类的表,每个具体类的表
看起来你的案例足够小,可以成为“每个类层次结构的表”。
答案 1 :(得分:1)
如果您没有多个字段,我会使用@Embedded
实体。只需将您可能拥有的字段映射到表并使用JPA的@Embedded选项,以保持面向思维对象。