【问题标题】:SQL Query in JavaSpring Returning NullJavaSpring中的SQL查询返回Null
【发布时间】:2019-11-01 09:39:09
【问题描述】:

我正在尝试通过 Java Spring 进行简单的 SQL 调用。数据库有数据,但调用时返回空值列表。

有趣的是,当我选择特定行时,它会返回正确的值。 (见下文)

BasicAccountAuditRepo.java

@Repository
public interface BasicAccountAuditRepository extends CrudRepository<BasicAccountAudit, BasicAccountAuditPK> {

    List<BasicAccountAudit> findAll();

//THIS RETURNS NULL
    @Query("SELECT b FROM BasicAccountAudit as b WHERE id.accountRef  = :accountRef ")  
    List<BasicAccountAudit> findByAccountRef(@Param("accountRef") String accountRef);

//This returns the correct values for dcConnName
    @Query("SELECT id.dcConnName FROM BasicAccountAudit WHERE id.accountRef  = :accountRef ")  
    List<BasicAccountAudit> findByAccountRef(@Param("accountRef") String accountRef);

}

我正在为模型类使用嵌入式 ID。 BasicAccountAudit.java


@XmlRootElement
@Entity
@Table(name = "tb_Account_History", schema="dbo")

public class BasicAccountAudit implements Serializable{

    @EmbeddedId
    private BasicAccountAuditPK id;


    @Temporal(TemporalType.TIMESTAMP)
    @Column(insertable = true, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    private Date enteredDate;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(insertable = true, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    private Date lastUpdatedDate;


}

这里是主键类: BasicAccountAuditPK.java

package org.fusion.restful.basicaccount.model;

import java.io.Serializable;

public class BasicAccountAuditPK implements Serializable {

    private String accountRef;
    private String client;
    private String dcEligible;
    private String shortCode;
    private String loadCps;
    private String stpFlag;
    private String accountType;
    private String clearingFirm;
    private String exchange;
    private String dcConnName;
    private String status; 
    private String enteredBy;

 //getters and setters...
}

【问题讨论】:

  • 设置 logging.level.org.hibernate.SQL=debug 并发布生成的 SQL 语句
  • 嗨,西蒙!我在哪里设置?抱歉,我对此很陌生
  • 在application.properties文件中
  • 为什么您使用查询,而您可以使用 Data JPA 方法命名做完全相同的事情?喜欢List&lt;BasicAccountAudit&gt; findAllByAccountRef(String accountRef);
  • @DmytroGrynets 我之前尝试过使用该方法,但 accountRef 是 id 类的一部分,并且上述查询返回错误,因为 accountRef 不是 BasicAccountAudit 的一部分(它是 BasicAccountAuditPK 的一部分)

标签: java rest spring-boot jpa jpql


【解决方案1】:

您需要与别名用法保持一致。 在您的第一个查询中,您忘记了 where 子句中的别名:

"SELECT b FROM BasicAccountAudit as b WHERE id.accountRef  = :accountRef "

应该是

SELECT b FROM BasicAccountAudit as b WHERE b.id.accountRef  = :accountRef "

在您的第二个查询中,您没有声明别名,因此默认情况下它会在您的对象下查找 id。

【讨论】:

  • 您好,我尝试了您发布的查询并面临同样的问题。它返回一个空值列表
猜你喜欢
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
相关资源
最近更新 更多