Mat*_*llo 7 java hibernate jpa spring-data-jpa spring-boot
已经阅读了很多关于同一问题的问题,但我仍然无法解决这个问题。
String我的数据库需要有一个主键。
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class MyClass {
@Id
private String myId;
private String name;
// getters and setters..
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我在带注释的字段String中使用类型@Id,当我尝试保存对象时,Hibernate 会抛出异常。
ids for this class must be manually assigned before calling
Run Code Online (Sandbox Code Playgroud)
是的,我正在为该字段设置一个值。
我发现的解决方法:
@GeneratedValue到字段 - 不起作用Integer- 这对我来说不可行myId参数的构造函数public MyClass(String myId){ ... }- 不起作用这些解决方法都不适合我。
更新
我正在使用 Spring Boot 和 Spring Data JPA。
我如何插入:
我有一个@PostMapping带注释的方法,它处理 POST 请求并调用执行一些业务逻辑的服务并调用我的存储库进行持久化。
我发布的请求:
{
"myId": "myId",
"name": "myName"
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
尝试这种方法
\n\n@Entity\npublic class MyClass{\n\n @Id\n @GeneratedValue(generator = \xe2\x80\x9cUUID\xe2\x80\x9d)\n @GenericGenerator(\n name = \xe2\x80\x9cUUID\xe2\x80\x9d,\n strategy = \xe2\x80\x9corg.hibernate.id.UUIDGenerator\xe2\x80\x9d,\n )\n @Column(name = \xe2\x80\x9cid\xe2\x80\x9d, updatable = false, nullable = false)\n private UUID id;\n\n \xe2\x80\xa6\n}\nRun Code Online (Sandbox Code Playgroud)\n\n=======================================
\n\n我像这样调用,在我的环境中一切正常:
\n\n@Autowired\nprivate EntityManager entityManager;\n\n@PostMapping("")\n@Transactional\npublic void add(@RequestBody MyClass myClass){\n entityManager.persist(myClass);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n并请求通过邮寄方式发送正文:
\n\n{\n "myId" : "213b2bbb1"\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
19898 次 |
| 最近记录: |