如何在JPA/Hibernate中使用带字符串类型的@Id?

Kai*_*las 30 java hibernate jpa

我有一个实体,其中包含string类型的主键.该实体模型如下:

@Entity
public class MyEntity {

@Id
@Column(name="PR_KEY", unique=true)
private String prKey;

....
....

}
Run Code Online (Sandbox Code Playgroud)

但我面临的问题是TypeMismatch.

org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.String, got class java.lang.Long
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 38

如果你没有指定id生成策略,Hibernate将使用GenerationType.AUTO.这将导致任何

AUTO - 标识列,序列或表,具体取决于底层数据库.

如果你看这里,你会注意到所有那些生成类型的ID long,short或者int不是类型String.

假设你想要一个StringUUID作为id,你可以使用

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "PR_KEY")
private String prKey;
Run Code Online (Sandbox Code Playgroud)

  • 该密钥的值由我的程序中的其他实体提供.我不希望它自动生成.我认为GeneratedValue注释会使它生成价值.请指正 (3认同)