assigned before calling save & JPA id生成策略

關於JPA 主鍵,自定義生成遇到的問題,愚蠢的筆記mysql

 

第一次 報錯: ids for this class must be manually assigned before calling save()spring

在報這個問題的時候,必定去代碼中去查看本身代碼set設ID的邏輯,ID的值沒有被設置sql

下面是我寫的代碼,能夠看出,在上面setId,但是下面BeanUtils工具引用dto對象將master原值給覆蓋了數據庫

PS:  如下面說明->org.springframework.beans.BeanUtils工具能夠將dto對象對應master對象的字段替換,免去了一堆無聊的setteroracle

Master master = new Master();
Master.setId(id);
Master.setAmount(amount);
BeanUtils.copyProperties(dto, master); //此處是錯誤的,會覆蓋前面的值
repository.save(master);

 

補充學習, 關於Spring Data JPA提供主鍵生成,@GeneratorValue 4種策略以及支持的數據庫ide

GenerationType.TABLE            ---mysql, oracle, postgresql, kingbase
GenerationType.AUTO             ---mysql, oracle, postgresql, kingbase
GenerationType.IDENTITY        ---mysql, postgresql, kingbase
GenerationType.SEQUENCE     ---oracle, postgresql, kingbase工具

 

自定義生成主鍵,也有策略生成器,@GenericGenerator註解,該註解要配合@GeneratorValue一塊兒使用post

@GeneratedValue註解中的generator屬性和@GenericGenerator註解中name屬性保持一致,strategy屬性表示hibernate的主鍵生成策略學習

jar : org.hibernate:hibernate-core:5.2.16.Final的DefaultIdentifierGeneratorFactory類中的14種方式ui

public DefaultIdentifierGeneratorFactory() {
    this.register("uuid2", UUIDGenerator.class);
    this.register("guid", GUIDGenerator.class);
    this.register("uuid", UUIDHexGenerator.class);
    this.register("uuid.hex", UUIDHexGenerator.class);
    this.register("assigned", Assigned.class);
    this.register("identity", IdentityGenerator.class);
    this.register("select", SelectGenerator.class);
    this.register("sequence", SequenceStyleGenerator.class);
    this.register("seqhilo", SequenceHiLoGenerator.class);
    this.register("increment", IncrementGenerator.class);
    this.register("foreign", ForeignGenerator.class);
    this.register("sequence-identity", SequenceIdentityGenerator.class);
    this.register("enhanced-sequence", SequenceStyleGenerator.class);
    this.register("enhanced-table", TableGenerator.class);
}

注意: 使用的時候必須使用他給的字符串,好比uuid,必須是小寫,UUID大寫是無效的

 

示例: ↓↓↓

@Id
@GeneratedValue(generator = "orderId")
@GenericGenerator(name = "orderId",strategy = "uuid")
private String orderId;

 

----------------------------------------------

相關文章
相關標籤/搜索