簡體   English   中英

JPA復合主鍵表未返回值

[英]jpa composite primary key table not returning values

我是新的JPA,當我從復合主鍵表中檢索值時遇到了異常。

異常說明:

Problem compiling [select t from ASSIGN_TASK_EMPLOYEE t]. 
    [14, 34] The abstract schema type 'ASSIGN_TASK_EMPLOYEE' is unknown.
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1605)

以下是我的代碼

@Entity
        @Table(name = "ASSIGN_TASK_EMPLOYEE")
        //@IdClass(AssignTaskEmployeePk.class)
        public class AssignTaskEmployee implements Serializable {

            @EmbeddedId
            private AssignTaskEmployeePk assignTaskEmployeePk;

            public AssignTaskEmployeePk getAssignTaskEmployeePk() {
                return assignTaskEmployeePk;
            }

            public void setAssignTaskEmployeePk(AssignTaskEmployeePk assignTaskEmployeePk) {
                this.assignTaskEmployeePk = assignTaskEmployeePk;
            }

        }

       @Embeddable
        public class AssignTaskEmployeePk  {

            private String employeeId;
            private String taskId;
            public AssignTaskEmployeePk() {
            }

            @Override
            public boolean equals(Object obj) {
                // TODO Auto-generated method stub

                if (obj instanceof AssignTaskEmployeePk) {

                    AssignTaskEmployeePk employeePk = (AssignTaskEmployeePk) obj;
                    if (!employeePk.getEmployeeId().equals(this.employeeId)) {
                        return false;
                    }           
                    else if (!employeePk.getTaskId().equals(this.taskId)) {
                        return false;
                    }

                }
                else {
                    return false;
                }

                return false;

            }

            @Override
            public int hashCode() {      
                return employeeId.hashCode() + taskId.hashCode() ;
            }

            public String getEmployeeId() {
                return employeeId;
            }

            public void setEmployeeId(String employeeId) {
                this.employeeId = employeeId;
            }

            public String getTaskId() {
                return taskId;
            }

            public void setTaskId(String taskId) {
                this.taskId = taskId;
            }


            }

我在數據庫中為組合主鍵ASSIGN_TASK_EMPLOYEE(表)添加了四個值,哪個PK表

EMP_ID   TASKID
1         2
2         4
3         5
4         6 

現在,我想獲取分配給emp_id 1的任務。為此,我在下面編寫了查詢:這應該返回AssignTaskEmployee對象的列表。

entityManager.createQuery("select t from ASSIGN_TASK_EMPLOYEE t").getResultList()

執行此查詢時,出現以下異常

Exception Description: 

Problem compiling [select t from ASSIGN_TASK_EMPLOYEE t]. 
            [14, 34] The abstract schema type 'ASSIGN_TASK_EMPLOYEE' is unknown.
                at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1605)

JPQL應該使用實體名稱,默認是類的名稱。 AssignTaskEmployee

它應該是

entityManager.createQuery("select t from AssignTaskEmployee  t").getResultList()

上面將返回表ASSIGN_TASK_EMPLOYEE中的所有記錄。

如果要使用JPQL檢索特定記錄,則應使用WHERE語句,如下所示:

    Query query =  entityManager.createQuery("select t from AssignTaskEmployee t WHERE 
t.assignTaskEmployeePk.employeeId = :employeeId and t.assignTaskEmployeePk.taskId = :taskId")

query.setParameter("employeeId", 1);
query.setParameter("taskId",1);

query.getSingleResult()  //As expected to have only one record.

閱讀此內容以查詢EmbeddedId

暫無
暫無

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

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