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

标签 java sql-server jpa eclipselink

  • 一个实体在表 File 的两个字段中定义了主键,代码如下:

    @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( 文件.Id => 10228 File.FileName => 000350.pdf)] 在执行查询期间检测为空。主键不能包含 null。”

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

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

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

谢谢。

最佳答案

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

我编写的选择仅回答键的两个字段之一的表,因此 JPA 无法构建对象文件。

有关信息,此代码引发了异常:

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

在转换为对象 File JPA 时,我说主键为空,因为他只有两个字段之一。

关于java - EclipseLink - 在执行查询期间从行读取的主键被检测为空。主键不能包含 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40264374/

相关文章:

sql - 按 SQL Server 中总数的百分比分组

c# - 如何将 sql server express 存储在与 UI 不同的项目中?

java - 无法 Autowiring 存储库服务 Spring JPA

java - 我们可以在存储库层中使用一个 XA 资源和两个非 XA 资源吗

java - 使用 Spring Boot + Spring data JPA 保存在 JPA 定义中时出现异常

java - 在 set 方法中使用 Scanner.next() 并尝试在数组元素上调用它

java - Gradle找不到影子插件

java - 在 IBM MQ 中设置 MQRFH2 header 时出现问题

c# - 使用.Net(C#)调用Java函数

sql - 使用 FAST_FORWARD 定义游标有什么好处?