gpt4 book ai didi

java - JPA 2 (EclipseLink) 尝试使用 UUID 作为主键 EntityManager.find() 总是抛出异常(数据库是 PostgreSQL)

转载 作者:搜寻专家 更新时间:2023-10-31 20:15:56 26 4
gpt4 key购买 nike

我正在尝试使用 JPA 2 (EclipseLink) 将 UUID 用作主键。我使用 PostgreSQL 作为数据库。我的实体声明如下:我有一个 Employee 表,其 PK 设置为 UUID。我有一个映射到员工表的 JPA 实体,如下所示:

@Entity
public class Employee {
@Id
private String id;
...
...
}

当我调用 EntityManager.find(Employee.class, id) 时

我从 postgres 得到一个异常:

内部异常:org.postgresql.util.PSQLException:错误:运算符不存在:uuid = 字符变化

提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我也曾尝试将 Employee 类中的 id 更改为 java.util.UUID,但随后我得到以下信息(非常相似的错误):

内部异常:org.postgresql.util.PSQLException:错误:运算符不存在:uuid = bytea提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我真的不确定如何解决这个问题...有人有什么想法吗?

谢谢!

最佳答案

I'm trying to use a UUID for a primary key using JPA 2 (EclipseLink)

遗憾的是,标准 JPA 不包含 UUID 作为生成标识符的策略。

I have also tried changing the id in the Employee class to java.util.UUID (...)

这不是 Id 的有效类型(在您的情况下已被视为 Serializable)。 JPA 2.0 规范指出:

2.4 Primary Keys and Entity Identity

...

A simple primary key or a field or property of a composite primary key should be one of the following types: any Java primitive type; any primitive wrapper type; java.lang.String; java.util.Date; java.sql.Date; java.math.BigDecimal; java.math.BigInteger. If the primary key is a composite primary key derived from the primary key of another entity, the primary key may contain an attribute whose type is that of the primary key of the referenced entity as described in Section 2.4.1. Entities whose primary keys use types other than these will not be portable. If generated primary keys are used, only integral types will be portable. If java.util.Date is used as a primary key field or property, the temporal type should be specified as DATE.

换句话说,如果有解决方案,它将是特定于提供商的。

I'm really not sure how to go about fixing this... anyone have any ideas?

您需要为自定义排序配置 EL 并提供自定义序列生成器。参见 EclipseLink/Examples/JPA/CustomSequencing完整示例(使用 UUID 生成器)。

关于java - JPA 2 (EclipseLink) 尝试使用 UUID 作为主键 EntityManager.find() 总是抛出异常(数据库是 PostgreSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com