当前位置: 首页 > 知识库问答 >
问题:

在调用save on String ID之前,必须手动分配该类的ID

郜修雅
2023-03-14

我的数据库上需要一个string主键。

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 

是的,我正在为字段设置一个值。

  1. @generatedvalue批注添加到字段-未工作
  2. 将字段类型更改为integer-这对我是不可行的
  3. 添加接收myId作为参数的构造函数public MyClass(String myId){...}-未工作
  4. 使用UUID-我不能,因为此id是由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
    }
}

共有1个答案

孙星鹏
2023-03-14

试试这个方法

@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"
}
 类似资料:
  • 我有一个包含字段名、姓、性别、电子邮件、密码、DOB、地址和角色的user类。 我想创建电子邮件作为我的主键,因此我有@id,但由于它是字符串类型,我不能使用@Generation注释。每当我尝试在Db中插入一个新用户时,我都会得到一个错误,嵌套的异常是org.hibernate.id.IdentifierGenerationException:在使用根本原因调用save():com.niit.m

  • 我知道这个问题以前可能有人问过,但我没有得到一个解决我的问题的方法。我有一个varchar(20)的categoryID的主键列,实体类通过id属性映射到该主键列。在添加数据时,它采用通过UI输入的id值,但在编辑其他字段并通过UI保存时,它抛出异常“IdentifierGenerationException:在调用save()之前必须手动分配该类的id:” 请找到下面的代码: 在过去的两天里,请

  • 我在Hibernate和映射方面遇到了一些问题。 下面是我的功能: 每次调用函数时,我都得到: 对于此行: 我不明白为什么。因为在这种情况下,不需要手动分配位置的id,因为它是自动生成的。我一定是做错了什么,但三天后,我没有发现。 如果将来对其他人有帮助,只需通过以下方法修改id的参数:

  • 问题内容: 我在hibernate映射方面遇到了一些问题。就像这里 : 当我打电话给我时,出现异常: 为何hibernate无法单独使用这些ID?怎么了 问题答案: 首先-它不能生成它们,因为您没有告诉它怎么做。使用并选择所需的策略。 然后-您不能有两个字段。如果您想使用复合ID,请使用或

  • 我有这个我解决不了的问题,这是我的实体类: 最后一行是失败的,如果我移除它们,它起作用,我的意思是,它可以保存主题,但当我尝试这样做,它失败,我不知道如果我做错了什么,请帮助我!!