0
私は休止状態でシーケンスを扱っていますが、フォーマットには命名制約があります。フォーマットはSEQ_です。 SequenceStyleGeneratorをシーケンス名の接頭辞のためにカスタマイズ/パラメータ化するにはどうすればよいですか?SequenceStyleGenerator、接尾辞の代わりに接頭辞を使用する方法
私は休止状態でシーケンスを扱っていますが、フォーマットには命名制約があります。フォーマットはSEQ_です。 SequenceStyleGeneratorをシーケンス名の接頭辞のためにカスタマイズ/パラメータ化するにはどうすればよいですか?SequenceStyleGenerator、接尾辞の代わりに接頭辞を使用する方法
私は、SequenceStyleGeneratorを継承するクラスを作成し、接頭辞を持つためにdecideSequenceName関数をオーバーライドしました。
public class PrefixSequenceStyleGenerator extends SequenceStyleGenerator {
public static final String CONFIG_PREFER_PREFIX = "prefer_sequence_prefix";
public static final String CONFIG_SEQUENCE_PER_ENTITY_PREFIX = "sequence_per_entity_prefix";
public static final String DEF_SEQUENCE_PREFIX = "SEQ_";
@Override
protected String determineSequenceName(Properties params, Dialect dialect) {
boolean usePrefix = ConfigurationHelper.getBoolean(CONFIG_PREFER_PREFIX, params, false);
if(usePrefix){
final String sequencePerEntityPrefix = ConfigurationHelper.getString(CONFIG_SEQUENCE_PER_ENTITY_PREFIX, params, DEF_SEQUENCE_PREFIX);
String sequenceName = ConfigurationHelper.getBoolean(CONFIG_PREFER_SEQUENCE_PER_ENTITY, params, false) ? sequencePerEntityPrefix + params.getProperty(JPA_ENTITY_NAME) : DEF_SEQUENCE_NAME;
final ObjectNameNormalizer normalizer = (ObjectNameNormalizer) params.get(IDENTIFIER_NORMALIZER);
sequenceName = ConfigurationHelper.getString(SEQUENCE_PARAM, params, sequenceName);
if (sequenceName.indexOf('.') < 0) {
sequenceName = normalizer.normalizeIdentifierQuoting(sequenceName);
final String schemaName = params.getProperty(SCHEMA);
final String catalogName = params.getProperty(CATALOG);
sequenceName = Table.qualify(
dialect.quote(catalogName),
dialect.quote(schemaName),
dialect.quote(sequenceName)
);
}
return sequenceName;
}else{
return super.determineSequenceName(params, dialect);
}
}
}
と私は私のスーパークラスでそれを使用します。
@MappedSuperclass
パブリッククラスAbstractModelWithTableSequenceはAbstractModelInterface {
private static final long serialVersionUID = 6503670320979543539L;
@Id
@Column(name="id")
@GenericGenerator(name = "seq_generator",
strategy = "com.gms.utils.PrefixSequenceStyleGenerator",
parameters = {
@org.hibernate.annotations.Parameter(
name = "optimizer", value = "pooled-lo"),
@org.hibernate.annotations.Parameter(
name = "initial_value", value = "1"),
@org.hibernate.annotations.Parameter(
name = "increment_size", value = "1"),
@org.hibernate.annotations.Parameter(
name = PrefixSequenceStyleGenerator.CONFIG_PREFER_SEQUENCE_PER_ENTITY, value = "true"),
@org.hibernate.annotations.Parameter(
name = PrefixSequenceStyleGenerator.CONFIG_SEQUENCE_PER_ENTITY_PREFIX, value = "SEQ_"),
@org.hibernate.annotations.Parameter(
name = PrefixSequenceStyleGenerator.CONFIG_PREFER_PREFIX, value = "true"),
}
)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_generator")
private Long id;
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
@Override
public boolean isNew() {
return getId() == null || getId() == 0;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
AbstractModelWithTableSequence other = (AbstractModelWithTableSequence) obj;
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
return true;
}
}
を実装