我将使用CacheJdbcPojoStoreFactory
我想在数据库中有一个VARCHAR字段,该字段映射到Java中的Enum。
我试图实现这一点的方式类似于以下内容。我希望应用程序代码与enum一起使用,但持久性使用字符串,以便它在数据库中是人类可读的。我不想在数据库中使用int值。
这似乎适用于创建新对象,但不能用于读取它们。它似乎试图直接设置字段,并且不调用setter(setSideAsString)。当然没有名为sideAsString的字段。这有用吗?有什么建议吗?
以下是代码摘录 在某些应用程序代码中,我会执行类似
的操作trade.setSide(OrderSide.Buy)
这将持续存在。我可以在侧栏中将“购买”视为VARCHAR。
在贸易中
private OrderSide side; // OrderSide is an enum with Buy,Sell
public OrderSide getSide() {
return side;
}
public void setSide(OrderSide side) {
this.side = side;
}
public String getSideAsString() {
return this.side.name();
}
public void setSideAsString(String s) {
this.side = OrderSide.valueOf(s);
}
现在配置商店时,我这样做
Collection<JdbcTypeField> vals = new ArrayList<>();
vals.add(new JdbcTypeField(Types.VARCHAR, "side", String.class, "sideAsString"));
干净启动后,如果我使用Ignite SQL查询查询Trade,并调用trade.getSide(),它将为null。其他(直接映射)列很好。
谢谢,
戈登
答案 0 :(得分:1)
BinaryMarshaller仅反序列化查询中使用的字段。
请尝试使用OptimizedMarshaller:
IgniteConfiguration cfg = new IgniteConfiguration();
...
cfg.setMarshaller(new OptimizedMarshaller());
这是the ticket,用于CacheJdbcPojoStore中的支持枚举映射。