gpt4 book ai didi

java - 在 Spring(数据库)中将相似的行合并为一个实体

转载 作者:行者123 更新时间:2023-12-01 19:20:45 29 4
gpt4 key购买 nike

我有一个问题。我的名为“table”的数据库表看起来像这样(现在由 3 行组成,它们实际上是相同的实体,但具有不同的代码)

enter image description here

而且我还有一个实体

public class Entity {
private int id;
private List<String> codes;
private String description;

//constructor + getters/setters
}

当我执行以下操作时,它会按预期工作

@Repository
class EntityRepository {

private final ResultSetExtractor<List<Entity>> resultSetExtractor =
JdbcTemplateMapperFactory
.newInstance()
.addKeys("id")
.unorderedJoin()
.newResultSetExtractor(Entity.class);

@Autowired
private NamedParameterJdbcOperations jdbcOperations;

List<Entity> getAll() {
return jdbcOperations.query(
"SELECT id, code as codes, description FROM table", resultSetExtractor);
}

}

结果:Entity[id=1,codes={"111","222","333"},description="description1"]

但是

当我像这样将字段添加到实体中时

enter image description here

public class Entity {
private int id;
private List<String> codes;
private List<Integer> anotherCodes;
private String description;

//constructor + getters/setters
}

@Repository
class EntityRepository {

private final ResultSetExtractor<List<Entity>> resultSetExtractor =
JdbcTemplateMapperFactory
.newInstance()
.addKeys("id")
.unorderedJoin()
.newResultSetExtractor(Entity.class);

@Autowired
private NamedParameterJdbcOperations jdbcOperations;

List<Entity> getAll() {
return jdbcOperations.query(
"SELECT id,
code as codes,
anothercode as anotherCodes,
description FROM table", resultSetExtractor);
}

}

然后我做同样的事情并得到结果:

Entity[id=1, 
codes={"111", "111", "111", "222", "222", "222", "333", "333", "333"},
anotherCodes={"1111", "2222", "2222", "1111", "2222", "2222", "1111", "2222", "2222"}
description="description1"]

但我想得到这个:

Entity[id=1, 
codes={"111", "222", "333"},
anotherCodes={"1111", "2222"}
description="description1"]

我该如何解决这个问题???请不要建议更改表格或将其与某些表格分开。我已经有了生产项目,所以我不能这样做

最佳答案

您应该按 id 进行分组,并使用 GROUP_CONCAT :

List<Entity> getAll() {
return jdbcOperations.query(
"SELECT id,
GROUP_CONCAT(code) as codes,
GROUP_CONCAT(anothercode) as anotherCodes,
description FROM table
GROUP BY id", resultSetExtractor);
}

请注意,根据您的版本,数据库可能会提示描述的选择,因为它不在 GROUP BY 子句中。在这种情况下,您应该

  1. 将其放入 GROUP BY 中,但如果同一个 ID 有多个描述,您将得到两行。
  2. 任意选择,例如 FIRST_VALUE(描述)

关于java - 在 Spring(数据库)中将相似的行合并为一个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59357463/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com