如何在JPA / Hibernate中使用带字符串类型的@Id?
我有一个实体,其中包含string类型的主键。 该实体模型如下:
@Entity public class MyEntity { @Id @Column(name="PR_KEY", unique=true) private String prKey; .... .... }
但我面临的问题是TypeMismatch。
org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.String, got class java.lang.Long
如果您没有指定id生成策略,Hibernate将使用GenerationType.AUTO
。 这将导致任何
AUTO – 标识列,序列或表,具体取决于基础DB。
如果你看这里 ,你会注意到所有这些生成id类型为long
, short
或int
,而不是String
类型。
假设你想要一个String
UUID作为id,你可以使用
@Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "uuid2") @Column(name = "PR_KEY") private String prKey;
检查数据库表中的PR_KEY数据类型。 如果列的类型为Number并且您尝试将相同的值映射到实体中的String,则可能会出现此问题。
同样适用于生成的Ids的coulmn。
当String用作id时,在通过Session / EntityManager查找实体时也应使用相同的类型:
而不是提供龙:
Long key = 1L; MyEntity me = session.get(MyEntity.class, key); //or MyEntity me = entityManager.find(MyEntity.class, key);
字符串应该给出:
String key = "1"; MyEntity me = session.get(MyEntity.class, key); //or MyEntity me = entityManager.find(MyEntity.class, key);
- 使用select语句锁定数据库文件
- 哪个SessionFactory应该用于transactionManager?
- 忽略关系中的FetchType.EAGER
- 如何使用Hibernate动态创建数据库中的表?
- 我们如何使用Hibernate和JPA调用存储过程?
- JPA with Hibernate 5:以编程方式创建EntityManagerFactory
- Hibernate实现。 我们支付反思罚款吗?
- HHH000302:无法构造当前会话上下文
- java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index;