Java 在调用字符串ID上的保存之前,必须手动分配此类的ID

Java 在调用字符串ID上的保存之前,必须手动分配此类的ID,java,hibernate,spring-boot,jpa,spring-data-jpa,Java,Hibernate,Spring Boot,Jpa,Spring Data Jpa,已经读了很多关于同一问题的问题,但我仍然无法解决这个问题 我需要在我的数据库上有一个字符串主键 import javax.persistence.Entity; import javax.persistence.Id; @Entity public class MyClass { @Id private String myId; private String name; // getters and setters.. } 问题是,如果我在@Id注释字段

已经读了很多关于同一问题的问题,但我仍然无法解决这个问题

我需要在我的数据库上有一个
字符串
主键

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class MyClass {

    @Id
    private String myId;
    private String name;

    // getters and setters..

}
问题是,如果我在
@Id
注释字段中使用
String
类型,Hibernate会在我尝试保存对象时引发异常

ids for this class must be manually assigned before calling 
是的,我正在给字段设置一个值

我发现的变通方法:

  • @GeneratedValue
    注释添加到字段-未工作
  • 将字段类型更改为
    Integer
    -这对我来说不可行
  • 添加一个构造函数,该构造函数接收
    myId
    作为参数
    public MyClass(String myId){…}
    -未工作
  • 使用UUID-我不能,因为这个id是由POST请求中的字段设置的
  • 这些变通办法对我都不管用

    更新

    我使用的是SpringBoot和SpringDataJPA

    如何插入:

    我有一个
    @PostMapping
    注释的方法,它处理POST请求并调用一个服务,该服务执行一些业务逻辑并调用我的存储库进行持久化

    我提出的要求是:

    {
        "myId": "myId",
        "name": "myName"
    }
    
    MyService.java

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class MyService {
    
        @Autowired
        private MyRepository myRepository;
    
        public MyClass save(MyClass myClass) {
            return myRepository.save(myClass); // save() should persist my object into the database
        }
    }
    
    试试这个方法

    @Entity
    public class MyClass{
    
        @Id
        @GeneratedValue(generator = “UUID”)
        @GenericGenerator(
            name = “UUID”,
            strategy = “org.hibernate.id.UUIDGenerator”,
        )
        @Column(name = “id”, updatable = false, nullable = false)
        private UUID id;
    
        …
    }
    
    ======================================

    我这样调用,在我的环境中,所有工作都很好:

    @Autowired
    private EntityManager entityManager;
    
    @PostMapping("")
    @Transactional
    public void add(@RequestBody MyClass myClass){
            entityManager.persist(myClass);
    }
    
    并要求随附正文邮寄:

    {
        "myId" : "213b2bbb1"
    }
    

    我不能使用UUID。此主键由POST请求中的字段设置。@MatheusCirillo好的,请仅为私有字符串myId添加@GeneratedValue(strategy=GenerationType.AUTO);不幸的是,还会出现其他错误<代码>“ids的未知整数数据类型:java.lang.String;嵌套异常为org.hibernate.id.IdentifierGenerationException:ids的未知整数数据类型:java.lang.String”
    @MatheusCirillo我的问题,如何插入记录?是否使用
    entityManager.persist
    ?确保将
    myId
    发送为非空