报错:Resolved [org.springframework.orm.jpa.JpaSystemException: Unknown integral data type for ids

订单表order的主键订单id使用String类型,dao层OrderDAO继承JpaRepository

controller层使用@PostMapping进行新增订单时报错:

WARN 5392 --- [io-8888-exec-10] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.orm.jpa.JpaSystemException: Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String]

解决方法: 

可以自定义主键生成策略

order实体类:

package com.vue.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "t_order")
@ToString
@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})
public class Order {

    @Id
    @GeneratedValue(generator = "my_id")
    @GenericGenerator(name = "my_id",strategy = "com.vue.util.MyIdGenerator")
    private String orderid;            //订单id

    private int ordertype;             //订单类型

    private String ordercompany;       //订单所属公司
 
    private int ordernum;              //订单数量

    private String orderaddr;          //订单地址

    private String orderdeadline;      //订单截止日期

    private String orderstatus;        //订单状态
}
自定义主键生成类MyIdGenerator:
package com.vue.util;

import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;

import java.io.Serializable;
import java.util.UUID;

public class MyIdGenerator implements IdentifierGenerator {
    @Override
    public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
        return "order-"+UUID.randomUUID();   //生成格式:order-87cc2eae-c0dd-4c05-beef-69396391bab7
    }
}

这样进行新增订单就成功了。

参考:spring boot+jpa演示id的生成策略及自定义id

你可能感兴趣的:(开发错误汇总)