当前位置: 首页 > 面试题库 >

在调用String ID上的save之前,必须手动分配此类的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..

}

问题是,如果我String在带@Id注释的字段中使用type ,则当我尝试保存对象时,Hibernate会引发异常。

ids for this class must be manually assigned before calling

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

我发现的解决方法:

  1. @GeneratedValue向该字段添加注释-不起作用
  2. 将字段类型更改为Integer-这对我来说不可行
  3. 添加接收myId作为参数的构造函数public MyClass(String myId){ ... }-不起作用
  4. 使用UUID-我不能,因为此ID是由PO​​ST请求随附的字段设置的。

这些变通办法都不适合我。

更新

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


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

  • 问题内容: 我在使用Hibernate和映射时遇到了一些问题。 这是我的功能: 这是我的两个实体: 位置 商人 每次调用函数时,都会得到: 对于这一行: 我不明白为什么。因为在那种情况下,由于它是自动生成的,因此无需手动分配位置的ID。我一定做错了,但是三天后我找不到。 我正在使用PostGreSQL,并且ID是按以下顺序自动生成的ID: 编辑解决方案: 好,谢谢您的回答。 如果将来可以帮助其他人

  • 我有一个包含字段名、姓、性别、电子邮件、密码、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会抛出一个异常。 是的,我正在为字段设置一个值。 将批注添加到字段-未工作 将字段类型更改为-这对我是不可行的 添加接收作为参数的构造函数-未工作 使用UUID-我不能,因为此id是由POST请求中的字段设置的。 这些变通办法对我都没用。 更新 我发布的请求: MyService.java

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