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
发送为非空