Mat*_*llo 7 java hibernate jpa spring-data-jpa spring-boot
已经阅读了很多关于同一问题的问题,但我仍然无法解决这个问题。
String我的数据库需要有一个主键。
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class MyClass {
    @Id
    private String myId;
    private String name;
    // getters and setters..
}
问题是,如果我在带注释的字段String中使用类型@Id,当我尝试保存对象时,Hibernate 会抛出异常。
ids for this class must be manually assigned before calling 
是的,我正在为该字段设置一个值。
我发现的解决方法:
@GeneratedValue到字段 - 不起作用Integer- 这对我来说不可行myId参数的构造函数public MyClass(String myId){ ... }- 不起作用这些解决方法都不适合我。
更新
我正在使用 Spring Boot 和 Spring Data JPA。
我如何插入:
我有一个@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
    }
}
尝试这种方法
\n\n@Entity\npublic class MyClass{\n\n    @Id\n    @GeneratedValue(generator = \xe2\x80\x9cUUID\xe2\x80\x9d)\n    @GenericGenerator(\n        name = \xe2\x80\x9cUUID\xe2\x80\x9d,\n        strategy = \xe2\x80\x9corg.hibernate.id.UUIDGenerator\xe2\x80\x9d,\n    )\n    @Column(name = \xe2\x80\x9cid\xe2\x80\x9d, updatable = false, nullable = false)\n    private UUID id;\n\n    \xe2\x80\xa6\n}\n=======================================
\n\n我像这样调用,在我的环境中一切正常:
\n\n@Autowired\nprivate EntityManager entityManager;\n\n@PostMapping("")\n@Transactional\npublic void add(@RequestBody MyClass myClass){\n        entityManager.persist(myClass);\n}\n并请求通过邮寄方式发送正文:
\n\n{\n    "myId" : "213b2bbb1"\n}\n