Bri*_*asa 5 java postgresql jpa eclipselink java-ee
我正在尝试使用JPA 2(EclipseLink)将UUID用于主键.我正在使用PostgreSQL作为数据库.我的实体声明如下:我有一个Employee表,其PK设置为UUID.我有一个JPA实体映射到employee表,如下所示:
@Entity
public class Employee {
@Id
private String id;
...
...
}
Run Code Online (Sandbox Code Playgroud)
当我调用EntityManager.find(Employee.class,id)时
我从postgres得到一个例外:
内部异常:org.postgresql.util.PSQLException:错误:运算符不存在:uuid =字符变化
提示:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换.
我也尝试将Employee类中的id更改为java.util.UUID,但后来我得到以下(非常类似的错误):
内部异常:org.postgresql.util.PSQLException:错误:运算符不存在:uuid = bytea提示:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换.
我真的不确定如何解决这个问题......任何人都有任何想法?
谢谢!
我正在尝试使用 JPA 2 (EclipseLink) 将 UUID 作为主键
不幸的是,标准 JPA 不包括 UUID 作为生成标识符的策略。
我还尝试将 Employee 类中的 id 更改为 java.util.UUID (...)
这不是 an 的有效类型Id(已按照Serializable您的情况进行处理)。JPA 2.0 规范指出:
2.4 主键和实体身份
...
简单主键或复合主键的字段或属性应该是以下类型之一:任何 Java 原始类型;任何原始包装类型;
java.lang.String;java.util.Date;java.sql.Date;java.math.BigDecimal;java.math.BigInteger。如果主键是从另一个实体的主键派生的复合主键,则主键可以包含一个属性,该属性的类型是所引用实体的主键的类型,如第 2.4.1 节中所述。主键使用除这些之外的类型的实体将不可移植。如果使用生成的主键,则只有整数类型是可移植的。如果java.util.Date用作主键字段或属性,则时间类型应指定为DATE。
换句话说,如果有解决方案,它将是特定于提供商的。
我真的不知道如何解决这个问题...有人有什么想法吗?
您需要配置 EL 以进行自定义排序并提供自定义序列生成器。有关完整示例(使用 UUID 生成器),请参阅EclipseLink/Examples/JPA/CustomSequencing 。
| 归档时间: |
|
| 查看次数: |
6508 次 |
| 最近记录: |