簡體   English   中英

我正在嘗試使用 H2 內存數據庫和自定義 @GenericGenerator 策略,但在內部我的 customeId 生成器沒有被調用

[英]I am trying to use H2 in-memory database and custom @GenericGenerator strategy but internally my customeId generator is not getting called

我正在使用 H2 數據庫創建一個 spring 引導應用程序,我想使用一些前綴創建一個customId生成器,但它沒有被創建。

因為我通過擴展SequenceStyleGenerator創建了FilmsIdGenerator ,如下所示。 但是在為主列show_id生成值時,不會調用自定義生成器。 它沒有附加我提到的前綴,如 B_00001 理想情況下應該是為主鍵show_id創建的格式,但它正在創建默認 s1、s2 ... 任何人都可以幫忙

public class FilmsIdGenerator 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);
    }
}

上面給出的是我的自定義 id 生成器 class ,它應該創建 B_00001 格式的主鍵 id。 但它采用默認序列格式,即 s1、s2、.. 等我使用的是 H2 數據庫。 誰能告訴我為什么沒有在我的主鍵上調用自定義生成器 JPA 正在為持久性生成主鍵 ID?

下面給出的是實體 class 在這里我傳遞我的 customidgenerator 作為策略和 3 個輸入參數我需要生成格式為 B_00001 的主鍵,但它正在生成 s1,s2,.. 即它采用默認序列格式。 為什么我的自定義 id 生成器沒有被應用到它。

因為我通過如下實現 SequenceStyleGenerator 創建了 customIdgenerator,但是在生成主列 show_id 時沒有調用自定義生成器。它沒有附加我提到的前綴,如 B_00001 理想情況下應該是為主鍵 show_id 創建的格式,但它是創建定義

@Table(name = "FILMS") 
public class Films implements Serializable, Comparator {
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "film_seq")
    @GenericGenerator(name = "film_seq", strategy = "com.films.demo.model.generator.FilmsIdGenerator", parameters = {
            @Parameter(name = FilmsIdGenerator.INCREMENT_PARAM, value = "50"),
            @Parameter(name = FilmsIdGenerator.VALUE_PREFIX_PARAMETER, value = "B_"),
            @Parameter(name = FilmsIdGenerator.NUMBER_FORMAT_PARAMETER, value = "%05d") })
    @Column(name = "show_id")
    private String show_id;

我已將此與 db2 數據庫一起使用。它正在生成具有正確前綴的正確 show_id。 這個問題似乎只存在於 memory 數據庫中的 h2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM