已经阅读了许多有关同一问题的问题,但我仍然无法解决此问题。
我需要String在数据库上有一个主键。
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会引发异常。
@Id
ids for this class must be manually assigned before calling
是的,我正在为该字段设置一个值。
我发现的解决方法:
@GeneratedValue
Integer
myId
public MyClass(String myId){ ... }
这些变通办法都不适合我。
更新
我正在使用Spring Boot和Spring Data JPA。
如何插入:
我有一个带@PostMapping注释的方法,该方法处理POST请求并调用执行一些业务逻辑的服务,并调用我的存储库以进行持久化。
@PostMapping
我发布的请求:
{ "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" }