2014-11-12 2 views
0

저는 작은 J2EE 메시지 보드 애플리케이션을 만들었습니다. 지속성 티어는 JPA (hibernate)를 사용하여 관계형/객체 매핑과 데이터 저장을 처리합니다. 모든 애플리케이션이 데이터 모델링을 위해 JPA 유형 프레임 워크를 사용하는 것은 아니며 일부는 더 수동 인 더 jdbc 기반 접근 방식을 사용하여 테이블과 직접 상호 작용한다는 점을 이해합니다.프레임 워크를 사용하지 않는 지속성 레이어

JPA를 사용하지 않고 퍼시스턴스 로직을 다시 만들면 어떻게 구현되는지 알 수 있습니다.

은 이미 모든 사용자 ID의를 불러 오는 같은 간단한 작업을 다시는데, 지금은 사용자 ID에 걸리는 getUserById() 메소드에서 작동하도록 노력하고, 그리고

나는 기본적으로 사용자 객체를 반환 여기 플레이 3 종류가 있습니다

-User(has attributes: id,username,password,list<post>,list<thread>started) 
-Thread(has attributes: id,title,list<post>, date,category,author(user),locked) 
-Post(has attributes: id,author(user),date,content,thread(that it belongs to) 

이러한 개체의 각은 데이터베이스의 테이블로 표현됩니다 :

USER (ID,USERNAME,PASSWORD) 
THREAD(ID,AUTHOR_ID,TITLE,START_DATE,CATEGORY,LOCKED) 
POSTS(ID,AUTHOR_ID,PUBLISH_DATE,CONTENT,THREAD_ID) 

나는 부일 간단 할 것이지만 d는 3 개의 테이블을 쿼리하여 User 객체를 위로 가져 왔지만 사용자가 시작한 스레드 목록을 작성하면 그 스레드 객체를 작성해야합니다. 저자는 무엇인지, 그들이 만든 게시물 등은 엉망으로 변하고있어, 그래서 나는 그것이 내가해야만하는 것보다 더 어렵게 만들고 있다고 확신한다.

최대 절전 모드 솔루션은 조인과 실제 테이블 수준 쿼리를 처리하기 때문에 완벽하게 작동하지만 jpa를 사용하지 않는 상점에서는 pure SQL을 사용하여 이러한 복잡한 개체를 다시 생성하기가 어렵습니다. 스레드와 포스트 객체와 같이 서로에게?

나는 뭔가를 놓치고 있다고 가정하고 있습니다.

나는 id, username, password를 하나의 쿼리에서 얻을 수있다. 하나의 쿼리로 모든 사용자 게시물을 얻을 수 있지만, 스레드 개체 목록을 만들면 이상하게됩니다.

답변

0

최대 절전 모드에서 "show_sql"을 활성화하고 생성 된 SQL 쿼리 ;)을 복사하여 붙여 넣기 만하면됩니다. 루프 부분에 대한

의사 코드 :

User user = SELECT_USER_FROM_DB; 
List<Thread> threads = SELECT_THREAD_FROM_DB_WHERE_AUTHOR_ID_EQUALS_USER_ID; 
user.threads = threads; 
for(Thread thread : threads) { 
    List<Post> posts = SELECT_POST_FROM_DB_WHERE_THREAD_ID_EQUALS_THREAD_ID; 
    thread.posts = posts; 
} 
List<Post> posts = SELECT_POST_FROM_DB_WHERE_AUTHOR_ID_EQUALS_USER_ID; 
user.posts = posts; 
for(Post post : user.posts) { 
    Thread thread = SELECT_THREAD_FROM_DB_WHERE_THREAD_ID_EQUALS_POST_THREAD_ID; 
    post.thread = thread; 
} 

이 사용자로부터 모든 스레드를 얻을 것이다. 그리고 각 스레드에 대해 모든 게시물을 가져옵니다. 또한이 사용자가 작성한 모든 게시물을 가져옵니다. 마침내 모든 사용자 게시물에 대해 모든 스레드를 가져옵니다.

+0

글쎄, SQL은 힘든 부분이 아니며, 수동으로 User 객체를 재현하고있다. ID, 사용자 이름, 암호를 하나의 쿼리에서 얻을 수 있습니다. 하나의 쿼리로 모든 사용자 게시물을 얻을 수 있지만 스레드 개체 목록을 만들면 이상하게됩니다. – user1154644

+0

루프 내에서'Thread' 객체를 생성 한 다음'User' 객체의'java.util.Collection'에 저장해야합니다. SQL로부터 객체를 생성하는 것은 항상 동일합니다. 그것이'User' 객체 또는'Thread' 객체인지는 중요하지 않습니다. 아마도 NoSQL 솔루션을 살펴볼 수도 있습니다. 거기에 모든 일대 다 관계를 단일 문서로 저장할 수 있습니다. 데이터를 결합하지 않고 검색하십시오. –

+0

스레드에 대한 쿼리가 스레드 개체 목록을 반환하지 않습니다. 수동입니다. – user1154644

관련 문제