gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:02:38 25 4
gpt4 key购买 nike

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

我需要一个 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){ ... } - 没用
  • 使用 UUID - 我不能,因为这个 id 是由 POST 请求中的一个字段设置的。

  • 这些解决方法都不适合我。

    更新

    我正在使用 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
    }
    }

    最佳答案

    试试这个方法

    @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"
    }

    关于java - 在调用保存字符串 ID 之前必须手动分配此类的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52010776/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com