需要简化代码。在我们公司,我们有关于如何为 DB 对象创建名称的模式(参见下面的列表),这些模式适用于所有类/表,这会导致每个实体类中出现大量重复代码(参见代码示例)。我能够使用自定义命名策略简化表名生成。但是,使用命名策略,ID 列仅从其属性名称生成,但我还需要一个类/表名称作为它的一部分。同样适用于 valueGenerator。
是否有任何选项如何仅使用自定义命名策略来应用这些规则?我还可以想象使用自定义注释 eq @AcmeId 的解决方案,它从配置中获取项目前缀并“扩展自身”到这四个注释,如果可能的话(你能指出一些例子吗?)。
模式
- 项目中包含的表具有项目名称作为前缀,因此项目 ABC 中 MyClass 实体的表具有名称 ABC_MYCLASS)
- ID 列名由表名和_ID 组成,eq ABC_MYCLASS_ID
- 生成 ID 列值的序列,与 ID 列同名,后跟 _SEQ 后缀,eq ABC_MYCLASS_ID_SEQ
public class MyClass {
static final String CLASS_NAME = "MYCLASS";
static final String TABLE_NAME = PROJECT_PREFIX + CLASS_NAME;
static final String COLUMN_ID_NAME = PROJECT_PREFIX + CLASS_NAME + AcmeNamingStrategy.ID_COLUMN_POSTFIX;
static final String SEQUENCE_NAME = PROJECT_PREFIX + CLASS_NAME + AcmeNamingStrategy.SEQUENCE_POSTFIX;
@Id
@Column(name = COLUMN_ID_NAME)
@SequenceGenerator(name = SEQUENCE_NAME, sequenceName = SEQUENCE_NAME)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_NAME)
private Long id;