已经阅读了很多关于同一问题的问题,但我仍然无法解决这个问题。
我需要有一个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
是的,我正在为该字段设置一个值。
我发现的解决方法:
- Add
@GeneratedValue
字段注释 - 不起作用
- 将字段类型更改为
Integer
- 这对我来说不可行
- 添加一个接收构造函数
myId
作为参数public MyClass(String myId){ ... }
- 没有工作
- 使用 UUID - 我不能,因为这个 id 是由 POST 请求中的字段设置的。
这些解决方法都不适合我。
UPDATE
我正在使用 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"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)