【发布时间】:2018-07-11 20:03:30
【问题描述】:
我想坚持每日收盘实体,代表股票的收盘价。
public class DailyData {
private Long id;
private String ticker;
private BigDecimal open;
private BigDecimal high;
private BigDecimal low;
private BigDecimal close;
private Timestamp date;
//getters, setters
}
由于数据提供者的 API 有限,我可能会在某些日期得到重复的条目(例如,如果我只需要两天,我仍然需要请求一个月的数据)。显然,我只想每个日期有一条记录,因此不应保留数据库中已经存在的任何日期。
这可能已经回答了here,但我在实践中遇到了麻烦。特别是,我不明白如何传递要持久的实际值。这改编自链接中的示例:
Param<Integer> myId = param("date", Timestamp.class);
create.insertInto(DATA, DATA.TICKER, DATA.OPEN, DATA.HIGH, DATA.LOW, DATA.CLOSE, DATA.DATE)
.select(
select(
date,
param("ticker", DATA.TICKER.getType()),
param("open", DATA.OPEN.getType()),
param("high", DATA.HIGH.getType()),
param("low", DATA.LOW.getType()),
param("close", DATA.CLOSE.getType()),
param("date", DATA.DATE.getType())
)
.whereNotExists(
selectOne()
.from(DATA)
.where(DATA.DATE.eq(date))
)
);
- 示例中传递的实际值在哪里?没有调用 .values() DSL 命令,该命令通常出现在 jOOQ 文档中,告诉它要插入哪些值。
- 最后不需要 .execute 吗?
- 有一个 batchInsert() 命令可以一次保存许多实体/行。上面提到的例子有很多批次吗?还是我只需要遍历所有实体并分别对每个实体执行唯一性检查?
【问题讨论】:
标签: postgresql jooq