1

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



}

Classroom JPA オブジェクトを SchoolUser オブジェクトに配置すると、エラーが発生します。これら 2 つのオブジェクトには直接的な関係がないためです。

JPAでこれを達成する方法はありますか?

4

1 に答える 1

1

classroom(またはその他の属性) を保持したくない場合は、@Transient注釈を使用して特定のフィールドを無視し、JPAマップを試行しないようにすることができます。

この注釈は、プロパティまたはフィールドが永続的でないことを指定します。エンティティ クラス、マップされたスーパークラス、または埋め込み可能なクラスのプロパティまたはフィールドに注釈を付けるために使用されます。

Example:
@Entity
public class Employee {
    @Id int id;
    @Transient User currentUser;
    ...
}
于 2013-10-27T02:31:53.283 に答える