我有一个包含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)