【问题标题】:Getting Null Values in Spring Native Query Project在 Spring Native Query 项目中获取 Null 值
【发布时间】:2020-10-27 11:37:25
【问题描述】:

这是我的数据存储库文件,我使用本机查询来检索数据的所有数据地址(位置)。我使用 Postman 调用了该函数,我得到了空的位置输出。这是我第一次使用 Native 查询,这些错误真的无法解决

数据存储库

public interface DataRepository extends JpaRepository<Data, Long> {

    @Query(value = "SELECT dataAddress FROM Data")
    List<DataProject> getDataAddress();
}

DataServiceImpl

    public List<DataProject> getDataAddress() {
        return dataRepository.getDataAddress();
    }

数据服务

List<DataProject> getDataAddress();

数据模型

@Entity
@Table(name = "CCCData")
public class Data {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long dataId;

    @Column(name = "DATA_NAME")
    private String dataName;

    @Column(name ="DATA_ADDRESS")
    private String dataAddress;

    @Column(name = "DATA_DESC")
    private String dataDesc;

    @CreationTimestamp
    private Date dateOfCreated;

    @CreationTimestamp
    private Date dateOfUpdated;

    public long getDataId() {
        return dataId;
    }

    public void setDataId(long dataId) {
        this.dataId = dataId;
    }

    public String getDataName() {
        return dataName;
    }

    public void setDataName(String dataName) {
        this.dataName = dataName;
    }

    public String getDataAddress() {
        return dataAddress;
    }

    public void setDataAddress(String dataAddress) {
        this.dataAddress = dataAddress;
    }

    public String getDataDesc() {
        return dataDesc;
    }

    public void setDataDesc(String dataDesc) {
        this.dataDesc = dataDesc;
    }

    public Date getDateOfCreated() {
        return dateOfCreated;
    }

    public void setDateOfCreated(Date dateOfCreated) {
        this.dateOfCreated = dateOfCreated;
    }

    public Date getDateOfUpdated() {
        return dateOfUpdated;
    }

    public void setDateOfUpdated(Date dateOfUpdated) {
        this.dateOfUpdated = dateOfUpdated;
    }

数据投影

public interface DataProject {

    String getDataAddress();
}

数据控制器

@GetMapping("/data/locations")
    public List<DataProject> getDataAddress() {
        return dataService.getDataAddress();
    }

邮递员输出

[
    {
        "dataAddress": null
    },
    {
        "dataAddress": null
    },
    {
        "dataAddress": null
    },
    {
        "dataAddress": null
    }
]

【问题讨论】:

    标签: spring-boot postman nativequery


    【解决方案1】:

    Spring 不会使用以下查询返回您唯一的地址。它仍然会返回您DATA 对象

    public interface DataRepository extends JpaRepository<Data, Long> {
    
        @Query(value = "SELECT dataAddress FROM Data")
        List<DataProject> getDataAddress();
    }
    

    对于仅获取 DataAddress,您需要在 Data 模型中为 DataAddress 创建一个构造函数

    public Data(String dataAddress) {
        this.dataAddress = dataAddress;
    }
    

    您的查询将如下所示:

    public interface DataRepository extends JpaRepository<Data, Long> {
    
        @Query(value = "SELECT new Data(dataAddress) FROM Data")
        List<DataProject> getDataAddress();
    }
    

    更新 1:

    如果您需要对具有相同数据类型的其他字段进行此操作,然后上述基于“构造函数”的方法将失败。还有一些其他的选择:

    您可以获取DATA 对象并使用java 流映射函数仅提取1 个字段。 data.stream().map((data) -&gt; data.getDataAddress()).collect(Collectors.toList())

    您可以使用原生 SQL 查询仅获取必填字段。
    @Query(value = "SELECT d.data_address FROM CCCData d", nativeQuery=true)

    【讨论】:

    • 您可以在DATA 类中创建尽可能多的构造函数。确保也创建一个空白构造函数。
    • 感谢您的宝贵建议,我的问题已解决。再次感谢您!
    • 您好 Aman Garg,当我只想获得另一个值(例如“dataName”)时,我需要做什么。我需要两个功能。 1)。获取数据地址,2)。获取数据名称
    • 这是不可能的,你的构造函数会发生冲突。创建一个不同的构造函数。
    • 谢谢你,我再次得到空值
    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2020-04-05
    • 2019-03-23
    相关资源
    最近更新 更多