- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的数据模型是
@Getter
@Setter
public class Customer {
@Id private ID id;
@CreatedDate protected Instant createdAt;
@LastModifiedDate protected Instant updatedAt;
@CreatedBy protected String createdBy;
@LastModifiedBy protected String updatedBy;
@Version protected Long version;
private UUID orderId;
private String offer;
}
我的仓库是
public interface CustomerRepository extends CrudRepository<Customer, UUID> {
@Query(
"SELECT ID, Offer FROM Customer WHERE orderId = :orderId ")
List<Customer> findCustomerByOrderId(
@Param("orderId") UUID orderId);
}
这将导致异常显示 'orderId column not found [42122-190]'
。所以 Spring 希望您始终查询所有列。我知道使用 JPA,我们在实体和数据模式之间有一个强大的映射。但是 spring data JDBC 的重点是避免 POJO 的数据模型和数据库模式之间的紧耦合。为什么 EntityRowMapper 不只是将 NULL
映射到不属于查询的属性?
有没有办法告诉使用的 RowMapper 忽略不属于查询的属性?为这些简单的查询创建单独的 RowMapper
似乎有很多不必要的工作。
我仍然可以通过像
这样更改查询来解决这个问题@Query(
"SELECT ID, Offer, OrderId, null as CreatedAt, null as CreatedBy, null as UpdatedAt, null as UpdatedBy, null as Version FROM Customer WHERE orderId = :orderId ")
但这仍然会用空值序列化整个对象。我在这里遗漏了什么明显的东西吗?
注意 这不是 Spring Data JPA。它的 Spring Data JDBC。
编辑仔细观察,异常来自 h2 数据库库。
Caused by: org.h2.jdbc.JdbcSQLException: Column "orderid" not found [42122-190]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3129)
at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:3217)
at org.h2.jdbc.JdbcResultSet.getObject(JdbcResultSet.java:522)
at com.zaxxer.hikari.pool.HikariProxyResultSet.getObject(HikariProxyResultSet.java)
at org.springframework.data.jdbc.core.EntityRowMapper.readFrom(EntityRowMapper.java:127)
最佳答案
你至少现在不能。
对此有三种解决方案,您已经指出了其中两种:
使用 , NULL as <column-name>
扩展您的选择语句对于所有缺失的列。
我不确定
But this will still serialize the entire object with null values.
意味着这在某些方面对您不起作用。
RowMapper
.你写:
But the whole point of spring data JDBC is to avoid the tight coupling between pojo's data model and database schema.
这不太对。Spring Data JDBC 的一个重要目标是在实体和表行之间不存在运行时连接。这将需要代理或类似的东西,并带来很多复杂性。但是实体和表之间的结构映射可能会更强大(现在肯定是这样),因为 JPA 中可用的所有映射变体都带来了复杂性。Spring Data JDBC 的主要目标是在概念上比 JPA 更简单。
你也问
Why not the EntityRowMapper is just mapping NULL to the properties which are not part of the query?
我不确定我在编码时是否积极考虑过它,但我不喜欢默认为 NULL
的想法。因为这很容易因为别名中的拼写错误而导致意外不加载列。
但我并不反对替代解决方案。如果你有想法please create a feature request .
关于spring-data-jdbc - 如何使用@Query 查询多列但不是所有列,但仍使用域数据模型与 Spring Data JDBC 进行映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55146977/
我有两个具有不同格式的相似数据的数据框 df1: Nodo X Y Z CTB3901 CTBX3901 CTBY3901 CTBZ3901
这个问题在这里已经有了答案: Using tuples in SQL "IN" clause (9 个回答) 关闭 8 年前。 我尝试获得一些满足特定条件的用户: SELECT * FROM use
我目前正在使用 MySQL (5.7) 来查询成员表。 当我执行如下查询时: SELECT fname, lname, added FROM Members WHERE ((fname, lname)
我正在使用 CSS 创建多个列,以提供与 Pinterest 界面类似的外观(例如,框列,但整齐地堆叠在彼此之下)。 这是我使用的代码: #feed-post-home .feed { -mo
我正在使用 VLookup 函数来查找列中存在的多个值。这工作得很好,但只需要很多时间,因为我在 Excel 表中有 100,000 行。 有什么办法可以加快这段代码的速度吗? 该代码基本上在列中查找
如果这个词正确的话,我有 4 列和 4 个不同的参数。每个参数大约有 3-5 个变量。我想做的是在维护不同列的同时创建 4 个不同参数的所有可能组合。因此,假设我有以下示例: **Column A |
我正在尝试使用 arrange_()使用字符串输入并按降序排列在其中一列中。 library(dplyr) # R version 3.3.0 (2016-05-03) , dplyr_0.4.3 #
我只是想知道是否有可以包含多列的 wpf 组合框控件? 如果没有,我需要使用什么 XAML 来实现这一目标? 如果可能的话,我只是在寻找一个基本的两列组合框, 谢谢 最佳答案 请引用这些链接 多列组合
我想使用 Select 根据第二个表中的值更新表中的多个列语句来获取这样的值: UPDATE tbl1 SET (col1, col2, col3) = (SELECT colA, colB, col
如果我们需要根据给定列的某些值集查询表,我们可以简单地使用 IN 子句。 但是如果需要基于多列执行查询,我们不能使用 IN 子句(在 SO 线程中 grepped)。 从其他 SO 线程,我们可以使用
我需要用分隔值拆分表中两列的值。 我的源表如下所示: 产品IDean_upc已批准21029618710103368021;8710103368038;87101033680141;0;1929236
我正在尝试在 WPF 中创建一个包含多列的 TreeView 。我很清楚,关于这个主题确实有很多问题。但是,他们在绑定(bind)数据时似乎采用了不同的方法。每个人似乎都设置了 itemssource
我正在尝试使用以下数据在 Excel 中创建数据透视表: 我试图得出的最终结果(使用枢轴)是这样的摘要: 但是我不知道如何让 Excel 计算/添加/考虑所有列。我可以为每个单独的字段/列创建一个数据
我正在尝试在 WPF 中创建一个包含多列的 TreeView 。我很清楚,关于这个主题确实有很多问题。但是,他们在绑定(bind)数据时似乎采用了不同的方法。每个人似乎都设置了 itemssource
如何在最多几列的每行返回 1 个值: 表名 [Number, Date1, Date2, Date3, Cost] 我需要返回这样的东西: [Number, Most_Recent_Date, Cos
我有两个数据框想要连接在一起(自行车骑行数据框和自行车站数据框)。 我一直在使用 pandas 库,但我似乎无法编写代码来完美地操作连接。最初,我只是加入关键“station_id”,但我发现最近更新
我有以下 csv 文件,我想要内部联接 CSV 1:Trip_Data.csv (250MB) head -2 rand_trip_data_1.csv medallion,hack_license,
我知道以前也有人问过类似的问题。但是,我的问题略有不同。我正在尝试跨多个列获取 merge_asof 的功能。这是数据集: import pandas as pd left = pd.DataFram
我有一个数据库,里面保存着客户的数据。我需要知道我们在各个城市和国家有多少客户。我必须用单个查询来完成它。 我的表是客户,我有城市和国家列(均为varchar),其中包含有关它的信息。 所需的查询输出
我需要左连接两个表:Cardealers 和Applications。 我想查看哪些信用卡经销商收到了哪些申请。 每个申请都会转发给三个发卡商,因此我的表结构具有以下 3 列:receiver_1、r
我是一名优秀的程序员,十分优秀!