2011-09-28 6 views
0

Hibnerate를 사용하여 목록을 반환하는 것에 관한 정보를 살펴 보았으나 찾고있는 것과 일치하는 것을 찾지 못해서 조언이 필요합니다.Hibernate Help required

public class BPDataPK implements Serializable { 
    private String id; 
    private int userProfile; 
    private Date when;  
     ..... 
    } 

BPData :

public class BPData implements Serializable { 
    private BPDataPK dataPK; 
    private Date sessionStart; 
    ... 
} 

HibernateBPDataDAO :

나는 다음과 같은 클래스

BPDataPK이

public class HibernateBPDataDAO extends HibernateDaoSupport implements IBPDataDAO{ 
    .... 
public BPData[] getSessionBPData(Session session) throws Exception { 
     /**I need to get a list of BPData that matches the following 
     1. BPDataPK.id== session.getID; 
     2. BPDataPK.userProfile == session.getUserProfile; 
     **3. BPData.sessionStart == session.getSessionStart();** 
     */ 
    } 
} 

기본 키와 비 기본 키 중 하나와 일치하는 BPData 목록을 반환하려면 어떻게해야합니까 ??

답변

1

일부 정보는 주위에 보지 않아야합니다. 대신 reference documentation을 읽어야합니다.

이 문서에는 HQL 쿼리 언어를 사용하는 쿼리에 대한 전체 장이 포함되어 있으며, 다른 하나는 조건 쿼리 전용입니다. 여기 기준의 고정 세트를 가지고 있기 때문에, HQL은 작업에 더 적합 :

String hql = "select b from BPData b where b.dataPK.id = :id" 
      + " and b.dataPK.userProfile = :profile" 
      + " and b.sessionStart = :sessionStart"; 
Query q = hibernateSession.createQuery(hql); 
q.setString("id", session.getID()); 
q.setInt("profile", session.getUserProfile()); 
q.setTimestamp("sessionStart", session.getSessionStart()); // or setDate, depending on the type of this field 
List<BPData> result = q.list(); 
+0

감사를 할 최대 절전 모드. 그러나 예기치 않은 토큰 [b] [select b from ....] 나는 또한 사용자가 제공 한 참조를 방문했으며 구문과 유사한 패턴을 사용하고 있습니다. –

+0

b 별칭을 잊어 버렸습니다. 내 대답은 고쳐졌습니다. 설명서를 읽은 경우 직접 찾을 수 있습니다. –

+0

귀하의 도움에 다시 한번 감사드립니다. 그 차이점을 알지 못했습니다. : $ 나는 sessionStart를 확인하기 위해 HQL을 간단하게 만들었지 만, hibnerate는 어떤 데이터도 반환하지 않습니다. MYSQL 데이터베이스에서 콘텐츠는 (datetime 데이터 형식) 2011-04-29 11:43:00 q.setTimestamp ("sessionStart", session.getSessionStart())로 시도한; 및 q.setDate ("sessionStart", session.getSessionStart()); 성공없이. getSessionStart는 java.util.Date를 반환합니다. –

1

당신의 JPA의 immplementaion를 사용하는 경우는 프롬프트 응답이

@Entity 
@NamedQuery(
    name="findByMyQuery", 
    queryString="SELECT bpdata FROM BPData bpdata WHERE bpdata.dataPK = :sessionId AND bpdata.userProfile = :userProfile AND bpdata.sessionStart = :sessionStart " 
) 
public class BPData implements Serializable { 

    private BPDataPK dataPK; 
    private Date sessionStart; 
     ... 
    } 


public BPData[] getSessionBPData(Session session) throws Exception {  

    Query queryFindByMyQuery = entityManager.createNamedQuery("findByMyQuery"); 
    queryEmployeeByFirstName.setParameter("sessionId", session.getID()); 
    queryEmployeeByFirstName.setParameter("userProfile", session.getUserProfile()); 
    queryEmployeeByFirstName.setParameter("sessionStart", session.getSessionStart()); 
    return queryEmployessByFirstName.getResultList().toArray(); 
} 
+0

빠른 답장을 보내 주셔서 감사합니다. 그러나 나는 JPA를 사용하고 있는지 확실하지 않아서 최대 절전 모드에 익숙하지 않습니다. 그러나 내 저장 및 업데이트를 위해 getHibernateTemplate(). save(); –