我收到了错误:
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on xxx.yyy.zz.myentity.xxx_id references an unknown entity: java.util.UUID
代码
@ManyToOne
@JoinColumn(name = "xxx_id", nullable = false, updatable = false, referencedColumnName = "xxx_id", insertable
= false)
private UUID xxxId;
当我从AnotherEntity更改为UUID时,我得到了这个。我之所以这样做是因为我不想在我的实体中保存一个对象,而只是键入它(AnotherEntity中的键类型是UUID)。我发现当Object没有注释时会出现这个错误 @Entity注释。这是真的吗?我该如何解决这个问题?
答案 0 :(得分:1)
您可以将Entity
表示为SQL表,并将此Entity
中的字段(属性)表示为此表中的列。
这是使用Hibernate(或任何其他JPA实现)的最简单方法。
当您定义关系(OneToOne,OneToMany,ManyToOne或ManyToMany)时,您正在链接SQL表,因此,在JPA中,您正在链接实体。
您可以想象,您无法定义表格和列之间的关系。
所以:
你的xxxId应该是你的数据库中映射的对象(实体/表),Hibernate必须知道列映射。
这是@Entity注释的目的,以及你可以在Entity类上使用的所有@Column,@ JoinColumn。
所以是的,你不能在没有使用@Entity注释的ManyToOne关系中使用一个对象(Hibernate会像列一样考虑它)
因此,您不能使用JDK中的对象(因为它们未使用任何JPA注释进行注释)
更具体地说,java.util.UUID不是您可以更改的类。所以你无法告诉hibernate如何将它映射到数据库中的表。
所以我能想象的唯一方法就是使用你创建的实体来封装UUID。例如:
@Entity
@Table(name="UUID")
public class UUIDWrapperEntity {
@Id
@Column(name = "UUID")
private UUID uuid;
}