2013-09-16 32 views
2

我有一個問題,我的web應用程序:在管理bean的我:什麼意思是「用戶缺乏特權」?

private boolean isUserInDB() { 
    List users = userFacade.findByLogin(registerLog); 
    if(users.isEmpty()) 
     return false; 
    return true; 
}  

而且這種方法開始時,我有這個異常(從userFacade大概):

javax.el.ELException: javax.ejb.EJBException:The bean encountered a non-application exception; 
nested exception is: <openjpa-2.2.0-r422266:1244990 fatal general error> org.apache.openjpa.persistence.PersistenceException: 
user lacks privilege or object not found: USER {SELECT t0.id_user, t0.login, t0.password FROM USER t0 WHERE (t0.login = ?)} [code=-5501, state=42501] 
FailedObject: SELECT u FROM User u WHERE u.login = :login [java.lang.String] 

viewId=/pages/register.xhtml 
location=/home/jakub/Projekty/Collv2/build/web/pages/register.xhtml 
phaseId=INVOKE_APPLICATION(5) 



Caused by: 
org.apache.openjpa.lib.jdbc.ReportingSQLException - user lacks privilege or object not found: USER {SELECT t0.id_user, t0.login, t0.password FROM USER t0 WHERE (t0.login = ?)} [code=-5501, state=42501] 
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:247) 


or 


Caused by: 
org.apache.openjpa.lib.jdbc.ReportingSQLException - type not found or user lacks  
privilege: TEXT {stmnt 1932110061 CREATE TABLE COURSE (id_course SMALLINT NOT NULL, 
code VARCHAR(255), description TEXT, name VARCHAR(255), realization INTEGER, version 
SMALLINT, PRIMARY KEY (id_course)) ENGINE = innodb} [code=-5509, state=42509] 



/pages/register.xhtml at line 26 and column 104 action="#{registerController.register}" 

User.class和UserFacade在Netbeans(「數據庫實體類...」和「Session Beans From Entity Class ...」中自動生成:

你能幫我理解「用戶缺乏特權」的含義嗎?

編輯:

問題是在這裏:

public List<User> findByLogin(String login){ 
    Query q = em.createNamedQuery("User.findByLogin").setParameter("login", login); 
    List list = q.getResultList(); 
    return list; 
} 

查詢時創建拋出異常

+0

我執行它通過的Netbeans – kuba44

+0

通過執行命令行所作的相同的異常。我認爲我添加了所有必要的配置文件:peristence.xml,web.xml和context.xml – kuba44

回答

0

問題不在於數據庫,我不得不改變我的JP​​A配置:

@PersistenceContext(unitName = "CollDocPU") 
private EntityManager em; 

我不得不改變我的persistance.xml,變化的交易類型爲「JTA獲得的EntityManager 「並添加:

<jta-data-source>java:openejb/Resource/myDatabase</jta-data-source> 
<non-jta-data-source>java:openejb/Resource/myDatabaseUnmanaged</non-jta-data-source> 

,我在我的服務器配置申報資源:在[tomee安裝文件夾] /conf/tomee.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<tomee> 
    <Resource id="myDatabase" type="DataSource"> 
    JdbcDriver com.mysql.jdbc.Driver 
    JdbcUrl jdbc:mysql://localhost:11080/jkitaj?zeroDateTimeBehavior=convertToNull 
    UserName jkitaj 
    Password pass, 
</Resource> 

<Resource id="myDatabaseUnmanaged" type="DataSource"> 
    JdbcDriver com.mysql.jdbc.Driver 
    JdbcUrl jdbc:mysql://localhost:11080/jkitaj?zeroDateTimeBehavior=convertToNull 
    UserName jkitaj 
    Password pass, 
    JtaManaged false 
</Resource> 
</tomee> 

看有:

http://openejb.979440.n4.nabble.com/org-apache-openjpa-lib-jdbc-ReportingSQLException-type-not-found-or-user-lacks-privilege-td4665124.html

http://mobiarch.wordpress.com/2012/12/07/configuring-a-mysql-data-source-in-tomee/

3

您使用執行該語句沒有足夠的權限來創建用戶一張桌子。

由於@duffymo在評論中提到,用戶需要是granted適當的權限。根據我的經驗,嚮應用程序的(技術)用戶授予這些權限並不是一個好主意。

使用未用作技術應用程序用戶的數據庫管理員創建數據庫架構。

+1

需要授予適當的權限。你確定你想讓用戶創建表嗎?我不會。 – duffymo

+0

但我如何添加特權給用戶?在MySQL? – kuba44

+1

是的。 http://dev.mysql.com/doc/refman/5.1/en/adding-users.html – duffymo