2017-07-12 5 views
1

mapstructを使用してマッパーを生成しようとしています。 2つの倍(緯度と経度)をorg.hibernate.spatial.GeometryType.Pointにマップする必要があります。MapStructを使って2つのlongを別のオブジェクトにマップします。

ドキュメントでは、これを行う方法がわかりません。

私は(動作しない)、これを試してみました:非常に長いコード行については申し訳ありません

@Mapping(target="location", expression="java(new com.vividsolutions.jts.geom.GeometryFactory().createPoint(new com.vividsolutions.jts.geom.Coordinate(requestModel.longitude, requestModel.latitude)))") 

+2

あなたは「それは動作しません」と言うとき、それは正確に何を意味するのでしょうか?生成中にエラーまたは例外が発生しますか?生成されたコードは期待どおりに見えませんか? Btw。 '@ Mapper#imports()'でインポートされた型を追加することで、完全修飾クラス名を与えることを避けることができます。 – Gunnar

+0

動作していないと、結果にlocationプロパティのnull値が含まれていることを意味します。 – user1716970

+0

結果に "location"にnullが含まれている場合、そのエラーは他の場所にある必要があります。生成されたコードはどのように見えますか?マッパーをどうやって取得/呼び出していますか? – Ray

答えて

0

なぜ表現がうまくいかないのかよく分かりませんが、私は一般的にリファクタリングなどでうまくいっていないので避けようとしていますが、生成されたコードをチェックして、デバッガを介して

あなたはまた、decorators

文書に基づいていくつかのテストされていないサンプルコードを使用してコードでこれを扱うことができる:

@AfterMapping 
protected void mapPoint(RequestModel requestModel, @MappingTarget TargetEntity result) { 
     result.setLocation(
      new GeometryFactory().createPoint(
       new Coordinate(requestModel.longitude,requestModel.latitude 
       ) 
      ) 
     ); 
}