spring-boot - 在 Spring Native Query 项目中获取 Null 值
问题描述
这是我的数据存储库文件,我使用本机查询来检索数据的所有数据地址(位置)。我使用 Postman 调用了该函数,我得到了空的位置输出。这是我第一次使用 Native 查询,它真的不可能解决这些错误
资料库
public interface DataRepository extends JpaRepository<Data, Long> {
@Query(value = "SELECT dataAddress FROM Data")
List<DataProject> getDataAddress();
}
数据服务实现
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 不会使用以下查询返回您唯一的地址。它仍然返回你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) -> data.getDataAddress()).collect(Collectors.toList())
您可以使用本机 SQL 查询仅获取必填字段。
@Query(value = "SELECT d.data_address FROM CCCData d", nativeQuery=true)
推荐阅读
- node.js - 如何在同一个项目中为不同的用户创建两个本地策略?
- r - 'rmarkdown::render' 编织时未发现错误
- python - 模块“熊猫”没有属性“fillna”
- http - gRPC 客户端无法连接到服务器解析 HTTP/2 失败,仅在我的计算机上
- asp.net - 如何在 asp.net 中使用 keyCode 属性
- flutter - 访问 Statefull Widget 的状态
- python - 如何修复 Tkinter 因数据量大而死机或崩溃的问题?
- c# - 第二次异步调用后的 ObjectDisposedException
- python - ModuleNotFoundError:重命名父文件夹后没有命名模块
- python - mypy 说 request.json 返回 Optional[Any],我该如何解决?