2013-07-24 38 views
1

我目前正在研究基於WebSphere Application Server 7和DB2 Spatial Extender的應用程序,並且希望將JPA用於數據訪問層。將JPA映射到DB2 Spatial

我已經建立了一個非常簡單的表在我的數據庫用於測試目的:

JMTEST (id integer | position db2gse.st_point) 

所面臨的挑戰是將位置柱(db2gse.st_point)映射到我的JPA實體

的場

唯一的工作解決我發現迄今使用Hibernate作爲JPA實現,這樣我可以利用@ColumnTransformer註釋:

@Entity 
@NamedQuery(name = "getAllRecords", query = "SELECT j FROM Jmtest j") 
public class Jmtest implements Serializable { 

    private static final long serialVersionUID = 1L; 

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

    @ColumnTransformer(read="db2gse.ST_AsText(position)",write="db2gse.ST_PointFromText(?,1003)") 
    private String position; 

由於我使用的是WebSphere 7,它帶有JPA 1.0和IBM或OpenJPA實現。 不幸的是,我恐怕我必須堅持這些(不可能使用JPA 2.0,也不能使用替代JPA提供程序)

我在IBM或OpenJPA實現中找不到等效的@ColumnTransformer。如果存在,有人可以向我解釋我應該使用什麼嗎?

如果沒有,請給我一些關於如何使用IBM/OpenJPA實現將DB2Spatial列映射到JPA實體字段的建議?

非常感謝提前。

回答

0

查看存在於OpenJPA中的@Factory@Externalizer註釋。

+0

我做了,但它似乎不符合我的需要。實際上,字段轉換是由java方法執行的,而在我的情況下,轉換隻能由特定的DB2Spatial SQL函數(db2gse.ST_AsText和db2gse.ST_PointFromText) –

0

其實你並沒有被綁定到JPA 1.你可以安裝feature pack來獲得JPA 2的支持。

然後,您可以配置WAS使用類似Hibernate的third party jpa provider

使用第三方提供程序也可以在沒有功能包的情況下工作,但您必須使用jpa 1的舊版本。

+0

進行。是的,您知道我可以安裝JPA 2功能包。但正如我所說,我寧願避免它,因爲我不確定它不會干擾WAS上已安裝的其他應用程序,並利用開箱即用的JPA1實現(OpenJPA )。 我能夠使用Hibernate作爲WAS7上的JPA1提供程序(不包括FeaturePack),但由於兼容JPA1的Hibernate版本比較陳舊,因此@ColumnTransformer註釋不存在。我仍然無法找到OpenJPA的任何等價物 –

+0

嗯,實際上我們在沒有功能包的WAS 7上使用JPA 2。解決方法是使用Spring(我們仍然使用它)並通過spring加載JPA,如果你給persistence.xml一個不同的名字,WAS不會選擇它,你可以通過Spring使用persistenceXMLLocation(http:// static .springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.html#setPersistenceXmlLocation%28java.lang.String%29)beeing set。 –