相关疑难解决方法(0)

具有空值的JPA复合主键

我有一个包含oracle数据库中客户数据的表.这是一个简化的定义:

CUSTOMER (CUSTOMER_ID NUMBER NOT NULL,
          SOURCE_SYSTEM VARCHAR2(30),
          FULL_NAME VARCHAR2(360),
          PHONE_NUMBER VARCHAR2(240)
          )
Run Code Online (Sandbox Code Playgroud)

该表的主键是(CUSTOMER_ID, SOURCE_SYSTEM).

该表有许多行为SOURCE_SYSTEMnull.在数据库级别,没有问题,但是当我尝试通过JPA实体访问任何这些行时,它会导致许多问题:

1:em.find()用于获取具有null的行SOURCE_SYSTEM总是导致返回null.

2:如果表中不存在记录,则使用em.merge()以空值SOURCE_SYSTEM成功的行成功,但在后续更新时失败,因为合并始终导致正在运行插入.

3:使用em.createQuery()显式查询具有null的行会导致以下异常:

Exception [EclipseLink-6044] (Eclipse Persistence Services - 2.3.1.v20111018-r10243):
   org.eclipse.persistence.exceptions.QueryException
Exception Description: The primary key read from the row [ArrayRecord(
CUSTOMER.CUSTOMER_ID => 1
CUSTOMER.FULL_NAME => GUY PERSON
CUSTOMER.PHONE_NUMBER => 555-555-1234
CUSTOMER.SOURCE_SYSTEM => null)] during the execution of the query was detected to be null.
   Primary keys must not contain …
Run Code Online (Sandbox Code Playgroud)

java jpa eclipselink ejb-3.0 jpa-2.0

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

eclipselink ×1

ejb-3.0 ×1

java ×1

jpa ×1

jpa-2.0 ×1