Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FETCHER.allFields select到DTO对象时,不包括重命名的行 #277

Open
swiftlei opened this issue Nov 4, 2024 · 5 comments
Open

Comments

@swiftlei
Copy link

swiftlei commented Nov 4, 2024

假设table1的表结构为:
id,
name,
field1

Entity对象为
public class Table1Entity {
private Long id;
private String name;
@column(value = "field1")
private String field2;
}

DTO对象结构完全相同:
public class Table1Dto {
private Long id;
private String name;
private String field2;
}

则当查询 entityQuery.queryable(Table1Entity.class).where(...).select(Table1Entity.class, t -> Select.of(t.FETCHER.allFields())).toSQL()
输出的SQL的 select 中会包含 select id, name, field1 as field2 ...
但将 select 部分换成.select(Table1Dto.class, t -> Select.of(t.FETCHER.allFields())) 时,输出的 SQL 中的 select 部分只包含了id 和 name,不包含 field1 as field2 字段

@xuejmnet
Copy link
Collaborator

xuejmnet commented Nov 5, 2024

@swiftlei
http://www.easy-query.com/easy-query-doc/query/select-column.html#%E8%BE%93%E5%87%BA%E6%8C%87%E5%AE%9A%E5%88%97
image
目前来讲映射是通过属性->column,如果两者的column一致则会映射,因为也会存在Table1Dto叫做field3的情况,框架不应该强制限制用户两个实体必须相同属性名

@xuejmnet
Copy link
Collaborator

xuejmnet commented Nov 5, 2024

@swiftlei 如果需要这种模式我加一个注解dto上如果有这个注解就以property作为匹配自动映射

@xuejmnet
Copy link
Collaborator

xuejmnet commented Nov 5, 2024

@swiftlei 其实这个写法只需要select(vo.class)和你现在是一样的不需要Select.of()这个主要是为手动别名或者多表下使用的

entityQuery.queryable(Table1Entity.class).where(...).select(Table1Entity.class, t -> Select.of(t.FETCHER.allFields())).toSQL()
//上下一致的
entityQuery.queryable(Table1Entity.class).where(...).select(Table1Entity.class).toSQL()

@swiftlei
Copy link
Author

好的,谢谢!
或许这个映射的注解是有价值的
因为若仅从对象复制的视角来看,也许DTO的属性名相同的合理性要大于底层字段名相同的合理性;而且 ORM 的设计初衷之一就是尽量屏蔽原始表名和字段名,用重命名后的对象构建查询更合理

@xuejmnet
Copy link
Collaborator

好的,谢谢! 或许这个映射的注解是有价值的 因为若仅从对象复制的视角来看,也许DTO的属性名相同的合理性要大于底层字段名相同的合理性;而且 ORM 的设计初衷之一就是尽量屏蔽原始表名和字段名,用重命名后的对象构建查询更合理

你说的确实是非常有道理的,设计之初只考虑到了用户映射不一致属性时的问题并没有考虑到手动指定column这种模式算是一种忽略,后续我会认真考虑您提供的这种思路

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants