我一直在關注Thorben 的博客(自定義字串前綴序列生成器)來生成字串前綴型別的自定義 ID,后跟數字。我的要求是生成自定義 ID,例如
CUS-60000
CUS-60005
CUS-60010
- 我們如何設定不同的初始值。按照博客,它總是從 1 開始并產生值 CUS-000001
- INCREMENT_PARAM 的作業原理。即使將此值設定為 5 ,我的下一個 id 也會增加 1。生成的值是 CUS-000002,CUS-000003
物體類
@Entity
@Table(name = "test")
@Data
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "test_seq")
@GenericGenerator(name = "test_seq", strategy = "com.xxx.entity.StringPrefixedSequenceIdGenerator", parameters = {
@Parameter(name = StringPrefixedSequenceIdGenerator.VALUE_PREFIX_PARAMETER, value = "CUS-"),
@Parameter(name = StringPrefixedSequenceIdGenerator.NUMBER_FORMAT_PARAMETER, value = "d")})
@Column(name = "id", updatable = false, nullable = false)
private String id;
private String name;
}
自定義序列生成器類
public class StringPrefixedSequenceIdGenerator extends SequenceStyleGenerator {
public static final String VALUE_PREFIX_PARAMETER = "valuePrefix";
public static final String VALUE_PREFIX_DEFAULT = "";
private String valuePrefix;
public static final String NUMBER_FORMAT_PARAMETER = "numberFormat";
public static final String NUMBER_FORMAT_DEFAULT = "%d";
private String numberFormat;
@Override
public Serializable generate(SharedSessionContractImplementor session,
Object object) throws HibernateException {
return valuePrefix
String.format(numberFormat, super.generate(session, object));
}
@Override
public void configure(Type type, Properties params,
ServiceRegistry serviceRegistry) throws MappingException {
super.configure(LongType.INSTANCE, params, serviceRegistry);
valuePrefix = ConfigurationHelper.getString(VALUE_PREFIX_PARAMETER,
params, VALUE_PREFIX_DEFAULT);
numberFormat = ConfigurationHelper.getString(NUMBER_FORMAT_PARAMETER,
params, NUMBER_FORMAT_DEFAULT);
}
}
uj5u.com熱心網友回復:
將以下引數添加到@GenericGenerator,它應該從 5 開始您的序列并遞增 5。這將獲得序列中每個持久物體的下一個值
@Parameter(name = StringPrefixedSequenceIdGenerator.INCREMENT_PARAM, value = "5"),
@Parameter(name = StringPrefixedSequenceIdGenerator.INITIAL_PARAM, value = "5"),
@Parameter(name = "optimizer", value = "pooled-hi"),
來自客戶序列生成器的 id 序列應該是
CUS-00005
CUS-00010
CUS-00015
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/505372.html
上一篇:用于計數和串列的復雜SQL查詢
