数据库查询直接在DBMS上工作但不在Java中

vv0*_*01f 6 java jpql

我正在尝试在处理Ingest到KIT DataManager(GitHub上的代码,它在tomcat7 运行)之前使用"Staging Processor"...

添加自定义临时处理器

package edu.kit.dama.mdm.content.mets;
Run Code Online (Sandbox Code Playgroud)

...

public class TryQuota extends AbstractStagingProcessor {
Run Code Online (Sandbox Code Playgroud)

...

@Override
public final void performPreTransferProcessing(TransferTaskContainer pContainer) throws StagingProcessorException {
Run Code Online (Sandbox Code Playgroud)

...

试图获取用户数据

......这很有效

        UserData userResult = null;
        try {
            userResult = mdm.findSingleResult(
                        "Select u FROM UserData u WHERE u.email=?1",
                        new Object[]{"dama@kit.edu"},
Run Code Online (Sandbox Code Playgroud)

email管理员用户标准userid1

                        UserData.class
                    );
        } catch (UnauthorizedAccessAttemptException e2) {
            System.out.println("exception on extracting userid");
                    e2.printStackTrace();
        }
        try {
            System.out.println("KIT DM ID: " + userResult.getUserId());
        }catch(Exception e4) {
            System.out.println("exception on output for userid");
            e4.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

试图从UserQuota获得配额

而另一方面,相应的实现不在这里工作(我想要工作)

        Number UserQuota = null;
        try {
            UserQuota = mdm.findSingleResult(
 //SQL would be: "SELECT quota FROM userquota WHERE uid=?;"
 //JPQL is …
                    "Select q.quota FROM UserQuota q WHERE q.uid=?1",
                    new Object[]{1},
                    Number.class
            );
        } catch (UnauthorizedAccessAttemptException e2) {
            System.out.println("exception on userquota");
            e2.printStackTrace();
        }
        System.out.println("quota is: " + UserQuota );
Run Code Online (Sandbox Code Playgroud)

UserQuota 在这里仍然是空的

DB是PostgreSQL,表是:

CREATE SEQUENCE userquota_seq       
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE;

CREATE TABLE userquota
( 
   id INTEGER NOT NULL DEFAULT nextval('userquota_seq'),
   uid INTEGER NOT NULL DEFAULT 0,
   quota DECIMAL NOT NULL DEFAULT 0,        
   CONSTRAINT uid_key UNIQUE (uid), 
   CONSTRAINT fk_uid FOREIGN KEY (uid) REFERENCES users(id)     
);
Run Code Online (Sandbox Code Playgroud)

我希望从处理器中的db获取此配额

INSERT INTO userquota (id, uid,quota) VALUES ( 0, 1, 1048576 );
Run Code Online (Sandbox Code Playgroud)

所以主要是我希望从db:for 1048576Long 获取摄取用户(此处为1)的条目.

任何提示欢迎如何继续这些事情.

lax*_*089 1

正如上面的评论所述,以下语句是无效的 SQL 语法:

SELECT u FROM UserData u WHERE u.email=?1

相反,根据上面的评论,正确的语法是:

SELECT u.* FROM UserData u WHERE u.email='dama@kit.edu'