0

これが私の機能です:

private boolean CheckPassword(String type, String login, String passwordHash) {
    EntityManagerFactory entityManagerFactory 
            = Persistence.createEntityManagerFactory("kwestionariuszFor" + type);
    EntityManager entityManager 
            = entityManagerFactory.createEntityManager();
    type = type.substring(0, 1).toUpperCase() + type.substring(1, type.length());
    List<Object> entities 
            = entityManager.createNamedQuery(type + ".findByLogin").setParameter("login", login).getResultList();
    if (passwordHash.equals(entities.get(0).Password)) {
        return true;
    }
    else {
        return false;
    }
}

Java は、どのテーブルにも IS Password 列があることを「認識」していません。私はそれを伝える方法は次のようになるかもしれないと考えていました:

List<type.toClass()>

または何か...私が望むものを達成する方法はありますか? if、after if、after if... を作成したくない-_-'

4

1 に答える 1

2

データベース テーブルを表すすべてのクラスに共通の型を作成する必要があります。

このような:

public abstract class PasswordObject {
    private String password;

    public PasswordObject(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }
}

createNamedQueryメソッドが を返すことができるかどうかはわかりませんが、List<PassowrdObject>そうでない場合は、次のようにキャストできます (そうしても安全である限り、それは使用方法によってのみわかります)。

PasswordObject po = (PasswordObject) entities.get(0);
String password = po.getPassword();
于 2012-05-31T13:06:36.887 に答える