[英]Annotation shortcut (Hibernate's @Id, @GeneratedValue, @SequenceGenerator)
需要簡化代碼。 在我們公司,我們有如何為 DB 對象創建名稱的模式(參見下面的列表),這些模式適用於所有類/表,這會導致每個實體 class 中出現大量重復代碼(參見代碼示例)。 我能夠使用自定義命名策略簡化表名生成。 但是,使用命名策略,ID 列僅從其屬性名稱生成,但我還需要一個類/表名稱作為它的一部分。 同樣適用於 valueGenerator。
是否有任何選項如何僅使用自定義命名策略來應用這些規則? 我還可以想象使用自定義注釋 eq @AcmeId 的解決方案,它從配置中獲取項目前綴並“擴展自身”到這四個注釋,如果可能的話(你能指出一些例子嗎?)。
模式
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;
這種方法將允許您輕松確定表和序列名稱。
如果您將 id 屬性一致地命名為id
,它也將解決 id 命名問題:
public class CustomNamingStrategy extends DefaultNamingStrategy {
...
@Override
public Identifier toPhysicalColumnName(final Identifier identifier, final JdbcEnvironment jdbcEnv) {
String result = super.toPhysicalColumnName(identifier, jdbcEnv);
return "id".equals(identifier.getText()) ? "ABC_" + result : result;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.