2013-02-24 68 views
1

我正在玩2.1的第一步,所以我在playframework網站上做了JavaTodoList教程。一切按預期工作。獲取休眠空間並在運行框架中運行

接下來我更改了todolist以使用運行在我的開發箱上的postgresql數據庫。我所要做的就是在application.conf`

db.default.driver=org.postgresql.Driver 
db.default.url="jdbc:postgresql://localhost:5432/todo" 
db.default.user=todo 
db.default.password=secretpassword 

更改一些設置,我刷新頁面,做數據庫的演變,並再次一切工作就好了。

現在我想玩hibernate-spatial來將位置座標存儲到每個todolist項目(實際上可能是任何其他基於位置的項目)。

我加了一些libraris到應用程序/ lib目錄下,即:

  • 休眠公地的註解 - 4.0.1.Final.jar
  • 休眠核心,4.1.9.Final.jar
  • 休眠空間-4.0-M1.jar
  • JDBC-stdext-2.0.jar
  • JTS-1.12.jar
  • PostGIS的-JDBC-1.5.3.jar
  • PostgreSQL相關8.4-701.jdbc4.jar

我用同樣的庫上的經典GlassFish的Java應用程序存儲空間的功能,所以將它們組合在一起。另外,postgresql數據庫在空間上使用postgis啓用,之前使用經典的java應用程序進行了測試。

我推廣的我的模型類待辦事項任務如下:

package models; 

import java.util.*; 

import play.db.ebean.*; 
import play.data.validation.Constraints.*; 

import javax.persistence.*; 

import com.vividsolutions.jts.geom.Point; 
import org.hibernate.annotations.Type; 

@Entity 
public class Task extends Model { 

@Id 
public Long id; 

@Required 
public String label; 

@Type(type="org.hibernate.spatial.GeometryType") 
@Column(columnDefinition="Point") 
public Point location; 

public static Finder<Long,Task> find = new Finder(Long.class, Task.class); 

public static List<Task> all() { 
    return find.all(); 
} 

public static void create(Task task) { 
    task.save(); 
} 

public static void delete(Long id) { 
    find.ref(id).delete(); 
} 
} 

我也加入了PostGIS JPA方言我的conf文件:

jpa.dialect=org.hibernate.spatial.dialect.postgis.PostgisDialect 

播放編譯一切都很好,那裏有一些錯誤,當在類路徑中缺少庫時,但我添加了上面列出的另一個,直到沒有錯誤再出現。儘管如此,沒有觸發新位置字段的數據庫演變。這似乎是玩忽略了我的應用程序的所有休眠空間特定部分。它的工作方式與之前的普通todolist應用程序相同。我認爲它與不同的休眠版本有關(是使用hibernate3還是hibernate4?我可以升級到4嗎?)。有人可以告訴我他使用的每個庫的哪些版本以及必須完成哪些配置設置?

更新:正如克里斯托弗提到的,我混淆了ebean和jpa。於是我拿出了jpa-sample,並將其轉移到我的簡單todolist樣本上。我更新了播放項目文件和依賴項,重新佈線的模型和控制器以適應JPA EntityManager,並從類路徑中刪除了一些庫,以便使用播放2.1中的hibernate 3。我也做了配置,就像在jpa示例中一樣,我的persistence.xml和application.conf幾乎看起來像一樣,除了我使用postgres方言進行休眠。我可以編譯我的項目,但是當我啓動它,我得到

的PersistenceException:[PersistenceUnit:defaultPersistenceUnit]無法配置的EntityManagerFactory

我配置了該劇的冗長調試,所以我發現,那這個異常在PropertyBinder構建我的Task Entity的id屬性後出現。

想我進一步出現一些步驟,但在看不到盡頭......

+0

從您在克里斯托弗的回答提出的意見,我可以看到你現在完全想通了。你可以在新的答案中分享你的模板(或者至少是重要的配置部分)嗎? – nietaki 2013-05-08 11:28:54

+1

我現在還在搞亂一個問題。建模我的實體和數據庫的演變過程非常瞭解,但問題是,幾何對象不會持久保存到數據庫(幾何列是空的)。因爲我沒有時間,我還沒有調試,但我認爲它只是一個小錯誤。當我解決這個問題時,我會將模板放在github上作爲JPA空間示例。 – 2013-05-09 09:16:04

回答

2

你似乎是在Ebean與JPA混合 - 它們是相互排斥的。

下面是一個例子JPA你:

https://github.com/playframework/Play20/tree/master/samples/java/computer-database-jpa

+0

我認爲這就是問題所在,我想到Ebean是JPA的一個包裝,並試圖將其配置爲使用hibernate-spatial。我沒有檢查所有的樣本,因爲我不知道每個樣本都有什麼意義。此外,文檔也讓我不知道如何開始使用JPA模型(sbt依賴關係是我還需要學習的另一件事)。感謝您的建議,我認爲我正在繼續這一點。我需要一些時間來重寫模型和控制器以適應JPA,但是如果我成功了,我會讓你知道......很遺憾,我喜歡易於使用Ebean模型實現。 – 2013-02-28 06:59:43

+0

正如你可以在我上面的更新中看到的,我幾乎複製了jpa樣本,並將它轉移到播放主頁中的簡單todolist樣本。這樣,通過重新連線模型和控制器類以及我學到的所有配置文件,我認爲該應用程序「現在說」JPA。不幸的是,我現在得到了一個PersistenceException(無法配置EntityManagerFactory),我找不到原因。也許這是一個全新的問題線程的東西。 – 2013-02-28 22:30:22

+0

所以最後我做了,謝謝你的建議。最好是在Play中運行hibernate-spatial並運行,就是使用computer-database-jpa示例。我在一個新項目中分出它,爲模型添加幾何圖形,重新配置它以使用postgresql和postgis方言。現在我有一個很好的模板來創建空間應用程序,並且運行起來非常快 – 2013-03-01 23:29:33