2017-01-12 13 views
1

を使用して、私は、Javaの列挙型にマップするデータベースのVARCHARフィールドを持つようにしたいCacheJdbcPojoStoreFactoryのIgnite CacheJdbcPojoStoreFactory列挙型フィールドに

を使用しています。

私がこれを達成しようとしている方法は、次のようなものです。私はアプリケーションコードが列挙型で動作するようにしたいが、永続性は文字列を使用してデータベースで人間が読むことができるようにする。私はデータベースでint値を使用したくありません。

これは新しいオブジェクトを作成するためにはうまくいくようですが、それらを読み込むためにはうまくいかないようです。フィールドを直接設定しようとしているようで、setter(setSideAsString)は呼び出されません。もちろん、sideAsStringというフィールドはありません。これはうまくいくはずですか?助言がありますか?ここで

は私が

trade.setSide(OrderSide.Buy) 

ような何かを考え、いくつかのアプリケーションコードでコードの抜粋 であり、これは罰金持続します。 VARCHARとしてサイドカラムの "Buy"を読むことができます。ストアを設定するとき、私はのIgnite SQLクエリを使用して取引を照会し、(trade.getSideを呼び出した場合の取引

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")); 

を行いますnullになります。他の(直接マップされた)列は問題ありません。

おかげで、

ゴードン

答えて

1

BinaryMarshallerは、クエリで使用するフィールドのみをデシリアライズ。

OptimizedMarshaller使用してみてください:

IgniteConfiguration cfg = new IgniteConfiguration(); 
... 
cfg.setMarshaller(new OptimizedMarshaller()); 

はここCacheJdbcPojoStoreでサポート列挙型のマッピングのためのthe ticketです。

+0

CacheJdbcPojoStoreでのenumマッピングのサポートがmasterにマージされました –