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

时间:2017-05-02 07:55:02

标签: java jpql

我正在尝试处理Ingest到KIT DataManagerCode on GitHub,它在tomcat7上运行)之前使用" Staging Processor" ...

添加自定义暂存处理器

@Override
    public void onClick(View v) {

        if (v == YourEditText) {

            // Get Current Date
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);


            DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {

                            YourEditText.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);

                        }
                    }, mYear, mMonth, mDay);
            datePickerDialog.show();
        }
}

...

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"}, 1

的管理员用户的标准email
userid

尝试从UserQuota获取配额

另一方面,相应的实现并没有在这里完成工作(我想要工作)

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

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 ); 此处仍然为空

DB是PostgreSQL,表是:

UserQuota

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

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 ); 获取摄取用户(此处为1)的条目为Long。

有关如何处理这些事情的任何提示都欢迎。

2 个答案:

答案 0 :(得分:1)

above comment中所述,以下语句是无效的SQL语法:

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

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

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

答案 1 :(得分:0)

我通过创建类UserQuota 1找到了解决方案,因此JPQL可以在这里工作。 由于我没有找到方法,我首先复制了类UserData,删除了我没有使用的所有内容,并根据我的数据库表userquota更改了成员。这也意味着在扩展db表时,这个类也需要改变。

我不知道的一个非常重要的部分是,这个新类还需要在persistence.xml中注册tomcat7,这里也是从UserData的条目中复制的。