2016-04-23 22 views
0

私はOAuth2で自分のアプリケーション用にJAVAでログインシステムを作りたいと思います。 しかし、まずアカウントを作成してデータベースに挿入する必要があります。PostgreSQLでの挿入列挙の問題

これは私の列挙テーブルです:

CREATE TYPE userRole AS ENUM ('ADMIN'); 

そして、これは私のユーザーテーブルです:

CREATE TABLE "users" 
(
    user_id SERIAL PRIMARY KEY NOT NULL, 
    user_email VARCHAR(255) NOT NULL, 
    user_password VARCHAR(255) NOT NULL, 
    user_role userRole 
); 
CREATE UNIQUE INDEX user_user_email_uindex ON "user" (user_email); 

DBIのデータベース接続でdropwizard使用このアプリケーション。私は私のコードを実行し、私のSQLクエリを実行すると 、アプリケーションは次のようなメッセージで500エラーをスロー:

The column index is out of range: 3, number of columns: 2.

Exception while binding 'userRole'

は、これは私のモデル(ユーザー)の構造である:

@JsonCreator 
public User(@JsonProperty("userEmail") String userEmail, @JsonProperty("userPassword") String userPassword, @JsonProperty("userRole") UserRole userRole) { 
    this.userEmail = userEmail; 
    this.userPassword = userPassword; 
    this.userRole = userRole; 
} 

構造ResultSetMapper :

public class UserMapper implements ResultSetMapper<User>{ 

@Override 
public User map(int i, ResultSet rs, StatementContext sc) throws SQLException { 
    return new User(rs.getLong("user_id"), rs.getString("user_email"), rs.getString("user_password"), UserRole.ADMIN); 
}  
} 

構造:UserDAO

@RegisterMapper(UserMapper.class) 
public interface UserDAO { 

@SqlUpdate("INSERT INTO users(user_email, user_password, user_role) VALUES(:userEmail, :userPassword, :userRole::userRole)") 
void create(@BindBean User user); 
} 

また、私は列挙クラスを持っている:

public enum UserRole { 
ADMIN; 

}

誰が私の問題で私を助けることができる

敬具、

答えて

1

私はあなたがあなたのクエリにタイプミスがあると思うが次のように修正してください:

@SqlUpdate("INSERT INTO users(user_email, user_password, user_role) VALUES(:userEmail, :userPassword, :userRole)") 

と列user_roleで、このようなVARCHAR(255)の種類のテーブルを作成します。ご返信用

CREATE TABLE "users" 
    (
user_id SERIAL PRIMARY KEY NOT NULL, 
user_email VARCHAR(255) NOT NULL, 
user_password VARCHAR(255) NOT NULL, 
user_role VARCHAR(255) 
    ); 
+0

おかげで、私はあなたのSQLの更新を試みるが、その作業はありません。これはエラーメッセージです:ERROR:列 "user_role"はuserrole型ですが、式は可変文字型です。ヒント:式を書き換えたり、キャストしたりする必要があります。 – Michael

+0

@Michaelは更新された答えを見る – Abdelhak