EclipseLink - 检测到执行查询期间从行读取的主键为空。主键不能包含null

时间:2016-10-26 14:01:47

标签: java sql-server jpa eclipselink

  • 一个实体在表文件的两个字段中定义了主键,这是代码:

    @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)]在执行查询期间检测到为null。主键不能包含null。“

您可以看到文件实体的主键字段不为空(File.Id => 10228)。在数据库中,表没有主键的任何字段为null(显然)。

我只是尝试在配置文件中设置参数“eclipselink.jpa.uppercase-column-names”= true,但它仍然不起作用。

我使用的是Apache Tomcat 8,Java 8和SqlServer 14. Eclipselink版本是2.4.0,JPA版本是2.0.4。

感谢。

1 个答案:

答案 0 :(得分:0)

问题在于数字选择,因为实体文件有一个带有两个字段的主键,而EclipseLink(JPA)至少在选择结果中需要主键的两个字段。

我写的选择只回答键的两个字段中的第一个表格,因此JPA无法构建对象文件。

有关信息,此代码抛出了异常:

(List<File>) nativeQuery.getResultList();

在转换为对象文件JPA中告诉我,主键是null,因为他只有两个字段中的一个。