2013-10-27 6 views
1

Я использую запрос JPA для получения набора результатов, затем в том же классе я хотел бы получить дополнительные данные. Вот как это выглядит:Возвращает два набора результатов с использованием JPA

public SchoolUser getCandidatesAsJson(@PathParam("applicationId") String applicationId, @PathParam("userPassword") String userPassword) { 

    EntityManager em = createEM(); 

    Query query = em.createQuery("SELECT su FROM SchoolUser su WHERE su.applicationId LIKE :applicationId and su.userPassword LIKE :userPassword", SchoolUser.class); 

    query.setParameter("applicationId", applicationId); 
    query.setParameter("userPassword", userPassword); 


    List <SchoolUser> schoolUser = query.getResultList(); 

    if(!schoolUser.isEmpty()) { 

     SchoolUser loginRecord = schoolUser.get(0); 

     int teacherId = loginRecord.getTeacherId(); 
     int studentId = loginRecord.getStundentId(); 

     if(teacherId!=0){ 

      TypedQuery<Classroom> query2 = em.createQuery("SELECT c FROM Classroom c where c.teacherId = :teacherId ORDER BY c.period", Classroom.class); 

      query2.setParameter("teacherId", teacherId); 

      List <Classroom> teacherClassList = query2.getResultList(); 

      if(!teacherClassList.isEmpty()){ 

            //put 2nd results set in SchoolUser object - line is commented because it causes an erro 
       //loginRecord.setClassRooms(teacherClassList); 

      } 

     } else if(studentId!=0){ 


      TypedQuery<ClassroomStudent> query3 = em.createQuery("SELECT cs FROM ClassroomStudent cs where cs.statusId = 1 AND cs.studentId = :studentId", ClassroomStudent.class); 
      query3.setParameter("studentId", studentId); 

          //put results in SchoolUser object 

     } 



     return loginRecord; 

    } else { 

     SchoolUser emptyRecord = new SchoolUser(); 

     return emptyRecord; 
    } 



} 

ошибка происходит от сдачи объекта Класс JPA в объект SchoolUser - так как эти два объекта не имеют прямого отношения.

Любой способ, которым я могу выполнить это с помощью JPA?

+0

Работал !!! Благодаря!!! – user1810305

ответ

1

Если вы не хотите, чтобы сохраняться classroom (или любой другой атрибут по этому вопросу), то @Transient аннотаций позволяет игнорировать определенное поле так, что JPA не будет пытаться отобразить его.

Эта аннотация указывает, что это свойство или поле не постоянно. Он используется для аннотирования свойства или поля объекта класса, сопоставленного суперкласса или встраиваемого класса.

Example: 
@Entity 
public class Employee { 
    @Id int id; 
    @Transient User currentUser; 
    ... 
} 
+0

Нравится 0: \t @Transient \t частный Список классRooms; – user1810305

+0

@ user1810305 да точно –

Смежные вопросы