2012-03-12 49 views
0

我正在嘗試將Play的Yabe教程和Postgres連接起來。使用Postgres和Play的Yabe教程

當我嘗試登錄爲特定用戶發佈的矢部應用的東西,

我得到這個下面的錯誤,

JPAQueryException發生:錯誤而從models.User執行查詢,其中電子郵件=?和密碼=:ERROR:列user0_.id不存在位置:8

我的用戶模型類是如下,

@Email 
@Required 
public String email; 

@Required 
public String password; 
public String fullname; 
public boolean isAdmin; 

public User(String email, String password, String fullname) { 
    this.email = email; 
    this.password = password; 
    this.fullname = fullname; 
} 

public static User connect(String email, String password) { 
    return find("byEmailAndPassword", email, password).first(); 
    //return find("Select u from User u where u.email = ? and u.password = ?", email, password).first(); 
} 

public String toString(){ 
    return email; 
} 

}`

我得到這個錯誤的連接方法的「return find(」byEmailAndPassword「,email,password).first();」線。

我使用下面的查詢創建的表中的Postgres,

創建表 「用戶」( ID SERIAL, 電子郵件VARCHAR(255)NOT NULL, 密碼爲varchar(255)NOT NULL, 全稱VARCHAR (255)NOT NULL, isAdmin boolean NOT NULL, primary key(id) );

我是新來的這個框架和mvc風格,並且不知道錯誤是什麼。任何人都可以引導我作爲應該做什麼來解決這個問題?

感謝

回答

1

這裏有幾件事情...

  1. 你擴大示範類,如矢部教程中指定?

  2. 你爲什麼要自己創建表。玩,通過Hibernate將爲你創建數據庫表。

嘗試刪除數據庫表並讓Play爲您創建。如果這仍然失敗,那麼對於您正在使用的數據庫而言,這通常會是Hibernate方言的問題。確保您在application.conf文件中使用Postgres方言。

1

我不確定自己是否聰明地創建了表格。問題是用戶是一個受保護的詞。如果你簡單地爲桌子選擇一個不同的名字並讓休眠爲你做剩下的事,這會容易得多。 我選擇

@Entity(name="YabeUser") 
public class User extends Model { 

它對我來說很好。

0

Niels作爲答案。

我將添加以下內容:請勿在您的DDL中使用CASE SENSITIVE NAME。

以同樣的方式不要在你的DLL中使用BLANKS 總結不要在你的DLL之間封裝你的對象的名字(表,列,...)。

我真的看到了一個由Business Analyst設計的數據庫,以及所有表名和列名,其中真正表達的是:帶空白的完全顯式複合名稱。我們不得不有這樣的疑問:

select "USER IDENTITY"."USER FIRSTNAME", "USER IDENTITY"."USER LASTNAME", "USER IDENTITY"."USER AGE" FROM "USER IDENTITY", "USER ROLE" WHERE "USER IDENTITY"."ROLE ID" = "USER ROLE"."ROLE ID" and "USER ROLE"."ROLE NAME" = 'ADMINISTRATOR'

這是一個真正的案例!不想再看到同樣的事情。