2013-07-01 3 views
1

В соответствии с этим ответом: Is com.vividsolutions.jts.geom.Geometry directly transportable using requestfactory? Геометрия (конкретный случай типа, который), не переносимый с использованием requestfactory.Как сделать запрос заводским без транспортабельного типа переносимым?

Так будет ли это работать? :

@Entity 
public class Poi { 


    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Id 
    private Integer id; 

    @Type(type="org.hibernate.spatial.GeometryType") 
    private Geometry geom; 


    //bi-directional many-to-one association to PoiCateg 
    @ManyToOne 
    @JoinColumn(name="id_cat") 
    private PoiCateg poiCateg; 

    @Version 
    private Integer version; 

    public Poi() { 
    } 

    public Integer getId() { 
     return this.id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public Geometry getGeom() { 
     return this.geom; 
    } 

    public void setGeom(Geometry geom) { 
     this.geom = geom; 
    } 


    public PoiCateg getPoiCateg() { 
     return this.poiCateg; 
    } 

    public void setPoiCateg(PoiCateg poiCateg) { 
     this.poiCateg = poiCateg; 
    } 

//not your standard getters and setters 

public String getGeomClient() { 
     return //result of method that converts from Geometry object to WKT string representation 
    } 

    public void setGeomClient(String geom) { 
     this.geom = // result of method that converts from String to Geometry 
    } 
} 

, а затем мой модифицированный объект прокси-сервер для Пои будет выглядеть так:

@ProxyFor(value=Poi.class) 
public interface PoiProxy implements EntityProxy { 

    public Integer getId() ; 

    public void setId(Integer id); 

    public PoiCategEntityProxy getPoiCateg() ; 

    public void setPoiCateg(PoiCateg poiCateg); 

//not your standard getters and setters 

    public String getGeomClient() ; 

    public void setGeomClient(String geom) ; 
} 

так getGeomClient и setGeomClient в объекте сервера содержат тип геометрии это будет проблема на клиенте?

EDIT1: забыл о виртуальной версии @Version Integer; ошибка исправлена.

ответ

2

Не только это сработает, но и будет (самым простым) способом заставить его работать.

Альтернативы включают использование оберток/строителей. Я также видел людей, использующих EntityProxy, где строковое значение используется как идентификатор, но будьте осторожны, что RequestFactory requires a per-request cache.

+0

будет ли мой подход считать плохой практикой, в отличие от использования обертки (вы сказали, что это самый простой не лучший способ)? – osh

+0

Я не думаю, что есть «лучший» способ. Как насчет наличия поля типа String и, возможно, создания геометрии «на лету» (возможно, кэшированного) для случаев, когда вам нужно иметь дело с ним, есть объект? («лучший» способ, вероятно, состоял бы в том, чтобы избежать ненужных преобразований) –