jOOQ可以在select子句中自动为表的所有列添加别名前缀吗?
jOOQ 还可以帮助解决数据库的 128 字节/字符名称长度限制吗?
问题的原因是 SimpleFlatMapper 用于映射。SimpleFlatMapper 需要将获取的数据库列名映射到模型。
模型示例(真正使用 getter/setter):
class Head {
public Integer id;
public List<Position> positions;
...
}
class Position {
public Integer id;
public Integer headId;
...
}
命名可以单独完成:
ResultSet resultSet = dsl.select(..., POSITION.ID.as("positions_id"), ...)
.from(HEAD)
.join(POSITION.as("positions")).onKey()
.fetchResultSet();
List<Head> headers = JdbcMapperFactory.newInstance()
.ignorePropertyNotFound()
.newMapper(Head.class)
.stream(resultSet)
.collect(Collectors.toList())
但是,如果它是具有多个连接/列的复杂模型,则有点乏味。我找到的唯一解决方案是手动编写函数。但是,我是否可能忽略了某些事情,而 jOOQ 可以自己完成还是提供帮助?
像这样的东西会非常好(可能不是最好的命名,我当场想不出更好的东西):
ResultSet resultSet = dsl.select()
.from(HEAD)
.join(POSITION.as("positions").prefixColumns()).onKey()
.fetchResultSet();
或者:
ResultSet resultSet = dsl.selectWithTableAlias()
.from(HEAD)
.join(POSITION.as("positions")).onKey()
.fetchResultSet();
产生以下 SQL:
SELECT head.id, head.***, positions.id AS positions_id, positions.headid AS positions_headid, positions.***
FROM head JOIN position AS positions ON head.id = positions.headid
此外,Oracle 和 MSSQL 等数据库的名称限制为 128 个字节/字符。在非常罕见的复杂场景中,由于需要嵌套,别名可能会达到该限制。
jOOQ 不能以某种形式为此提供解决方法,或者可以吗?所以基本上定义一个在 SQL 中使用的名称和一个实际结果对象的名称。
我知道,非常小众的要求。但他们会对映射有很大帮助。