EclipseLink - 检测到在执行查询期间从行中读取的主键为空。主键不能包含 null
EclipseLink - The primary key read from the row during the execution of the query was detected to be null. Primary keys must not contain null
一个实体,在 table 文件的两个字段中定义了一个主键,这是代码:
@Id
@Column(name = "\"ID_ORGANIZATION\"")
private java.math.BigInteger idOrganization;
@Id
@Column(name = "\"Id\"")
private java.math.BigInteger id;
这是查询:
"SELECT "Id","FileName" FROM "File" WHERE "Id" IN (SELECT "IdFile" FROM "DocumentFile" WHERE "IdDocument"=? AND ID_ORGANIZATION=?) AND ID_ORGANIZATION=? ORDER BY "Id""
假定参数正确完整且值正确
- 这是异常接收“主键从行 [ArrayRecord(
File.Id => 10228
File.FileName => 000350.pdf)] 在执行查询期间检测到为空。主键不能包含空值。”
可以看到File Entity的主键字段不为空(File.Id => 10228)。在数据库中,table 没有主键的任何字段 null(显然)。
我刚刚在配置文件里设置了参数"eclipselink.jpa.uppercase-column-names" = true,还是不行。
我正在使用 Apache Tomcat 8、Java 8 和 SqlServer 14。Eclipselink 版本是 2.4.0,JPA 版本是 2.0.4。
谢谢。
问题出在数字 select 中,因为实体文件有一个包含两个字段的主键,而 EclipseLink(JPA) 至少希望在 select 结果中包含主键的两个字段关键。
我写的 select 仅回答 table 键的两个字段之一,因此 JPA 无法构建对象文件。
有关信息,此代码引发了异常:
(List<File>) nativeQuery.getResultList();
在转换为对象文件时,JPA 告诉我主键为空,因为他只有两个字段之一。
一个实体,在 table 文件的两个字段中定义了一个主键,这是代码:
@Id @Column(name = "\"ID_ORGANIZATION\"") private java.math.BigInteger idOrganization; @Id @Column(name = "\"Id\"") private java.math.BigInteger id;
这是查询:
"SELECT "Id","FileName" FROM "File" WHERE "Id" IN (SELECT "IdFile" FROM "DocumentFile" WHERE "IdDocument"=? AND ID_ORGANIZATION=?) AND ID_ORGANIZATION=? ORDER BY "Id""
假定参数正确完整且值正确 - 这是异常接收“主键从行 [ArrayRecord( File.Id => 10228 File.FileName => 000350.pdf)] 在执行查询期间检测到为空。主键不能包含空值。”
可以看到File Entity的主键字段不为空(File.Id => 10228)。在数据库中,table 没有主键的任何字段 null(显然)。
我刚刚在配置文件里设置了参数"eclipselink.jpa.uppercase-column-names" = true,还是不行。
我正在使用 Apache Tomcat 8、Java 8 和 SqlServer 14。Eclipselink 版本是 2.4.0,JPA 版本是 2.0.4。
谢谢。
问题出在数字 select 中,因为实体文件有一个包含两个字段的主键,而 EclipseLink(JPA) 至少希望在 select 结果中包含主键的两个字段关键。
我写的 select 仅回答 table 键的两个字段之一,因此 JPA 无法构建对象文件。
有关信息,此代码引发了异常:
(List<File>) nativeQuery.getResultList();
在转换为对象文件时,JPA 告诉我主键为空,因为他只有两个字段之一。