一个实体在表文件的两个字段中定义了主键,这是代码:
@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。
感谢。
答案 0 :(得分:0)
问题在于数字选择,因为实体文件有一个带有两个字段的主键,而EclipseLink(JPA)至少在选择结果中需要主键的两个字段。
我写的选择只回答键的两个字段中的第一个表格,因此JPA无法构建对象文件。
有关信息,此代码抛出了异常:
(List<File>) nativeQuery.getResultList();
在转换为对象文件JPA中告诉我,主键是null,因为他只有两个字段中的一个。