簡體   English   中英

數據庫查詢直接在DBMS上工作但不在Java中

[英]Database Query working on DBMS directly but not in Java

我正在嘗試在處理Ingest到KIT DataManagerGitHub上的代碼 ,它在tomcat7 運行)之前使用“Staging Processor”...

添加自定義臨時處理器

package edu.kit.dama.mdm.content.mets;

...

public class TryQuota extends AbstractStagingProcessor {

...

@Override
public final void performPreTransferProcessing(TransferTaskContainer pContainer) throws StagingProcessorException {

...

試圖獲取用戶數據

......這很有效

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

具有userid 1的管理員用戶的標准email

                        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();
        }

試圖從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 );

UserQuota在此處仍為null

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)     
);

我希望從處理器中的db獲取此配額

INSERT INTO userquota (id, uid,quota) VALUES ( 0, 1, 1048576 );

所以主要是我想從db: 1048576作為Long獲取攝取用戶(此處為1)的條目。

任何提示歡迎如何繼續這些事情。

上面的注釋所述,以下語句是無效的SQL語法:

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

相反,根據上面的評論,正確的語法將是:

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

我通過創建一個UserQuota 1類找到了一個解決方案,所以JPQL可以在這里工作。 由於我沒有找到方法,我首先復制了類UserData ,刪除了我沒有使用的所有內容,並根據我的數據庫表userquota更改了成員。 這也意味着在擴展db表時,此類也需要更改。

我不知道的一個非常重要的部分是這個新類還需要在persistence.xml注冊tomcat7,這里也是從UserData的條目復制過來的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM