gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:19:24 25 4
gpt4 key购买 nike

  • 一个实体在表 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com