我想将 Javarecord
用作 JPA 的可嵌入对象。例如,我想将 ID 包装在记录中以使其类型安全:
@Entity
public class DemoEntity {
@EmbeddedId
private Id id = new Id(UUID.randomUUID());
@Embeddable
public static record Id(@Basic UUID value) implements Serializable {}
}
但是如果我尝试使用 Hibernate 5.4.32 坚持它,我会收到以下错误:
org.hibernate.InstantiationException: No default constructor for entity: : com.example.demo.DemoEntity$Id
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:85) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
at org.hibernate.tuple.component.AbstractComponentTuplizer.instantiate(AbstractComponentTuplizer.java:84) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
...
所以看起来 Hibernate 会像对待record Id
实体一样对待它,尽管它是一个@Embeddable
.
非 id 字段和 也会发生同样的情况@Embedded
:
@Embedded
private Thing thing = new Thing("example");
@Embeddable
public static record Thing(@Basic String value) implements Serializable {}
有没有办法将@Embeddable record
s 与 JPA/Hibernate 一起使用?