2012-07-13 2 views
0

최근에 최대 절전 모드를 사용하기 시작했으며 모든 주석 주변에서 머리를 맞고 올바르게 작동하도록 노력하고 있습니다. 나는 두 테이블 '사용자'내가Java Hibernate Annotation @JoinTable 관계

비슷한 모습 쿼리를 실행 SQL에서 지금

+--------+---------+----------+ 
| userid | buddyid | accepted | 
+--------+---------+----------+ 

+------+------+-------+ 
| id | name | email | 
+------+------+-------+ 

사용자의 친구 테이블 아래 유사하다 'user_friends'을 가지고

SELECT u.id AS id, u.name AS username, u.email AS email FROM user_friends 
INNER JOIN users AS u ON u.id = '1' WHERE buddyid = '2' AND ACCEPTED = 1 UNION ALL 
SELECT u.id as id, u.name AS username, u.email AS email FROM user_friends 
INNER JOIN users AS u ON u.id = '2' WHERE buddyid = '1' AND ACCEPTED = 1; 

나는이

@Entity 
@Table(name="users") 
public class User { 

    @Id 
    @GeneratedValue 
    private int id; 

    private int name; 
    private int email; 

    @OneToMany(fetch=UserBuddy.class, mappedBy="user", fetch=FetchType.LAZY) 
    @JoinColumn(name="userid") 
    private Set<UserBuddy> _buddies; 
} 

@Entity 
@Table(name="user_friends") 
public class UserBuddy { 

    @ManyToOne 
    @JoinColumn(name="id") 
    private User friendId; 

    private int id; 
    private int name; 
    private int email; 
} 
유사한 방식으로 자바 셋업에서 두 ​​개의 클래스를 가지고

사용자 테이블에서 user_friends 이름과 전자 메일을 가져 오는 방법을 알 수 없습니다. 아무도 도움을 줄 수 있습니까? 당신이 당신의 UserBuddy에서 사용자 개체를 가지고 있기 때문에

+0

당신이 사용자 클래스에 이름/이메일이없는 것을 참조? – jeff

+0

나는 그랬고, 그것을 설명하기 위해 예제를 업데이트했다. User.class를 다시 사용할 수 있습니까? 나는 거기에 저장된 모든 정보를 원하지 않는다. 사용자 테이블에는 그보다 더 많은 정보가 있지만이 경우에는 user_buddy에 대한 이름과 전자 메일 만 있으면됩니다. – DominicEU

+0

예를 들어 사용자 테이블에는 등록 날짜 및 가상 통화에 대한 정보도 들어 있습니다. 하지만 나는 user.friend에 대한 정보가 필요 없으므로 User.class를 재사용 할 생각이 없었습니다. – DominicEU

답변

1

, 그냥

@Entity 
@Table(name="user_friends") 
public class UserBuddy 
{ 

    @ManyToOne 
    @JoinColumn(name="id") 
    private User friend; // This is a User not an id 

    public String getEmail() 
    { 
    return friend.getEmail(); 
    } 
} 
+0

안녕하세요, 답변에 환호하십시오. 이와 같은 문제는 User.class에 user_buddy보다 많은 정보가 포함되어 있다는 것입니다. User_buddy는 목록에만 있으므로 정보가 거의 필요하지 않습니다. User.class에는 실제로 전자 메일과 이름 이외의 많은 정보가 포함되어있어 쿼리에서 쓸모없는 정보를 많이 반환합니다. 친구에게 선택 정보 만 돌려 줄 수있는 주석이 있습니까? – DominicEU

+0

그리고 SQL 쿼리에 표시된대로 "user_buddies.accepted = 1"로 허용 된 대화 상대 만 검색되도록하려면 어떻게해야합니까? : P – DominicEU

+0

Criteria API를 위해 HQL을 사용하여 "사용자로부터 u를 선택하십시오 .u UserBuddy buddy join buddy.accepted = true"와 같은 허용 된 대화 상대 만 원한다고 지정할 수 있습니다. – jeff

관련 문제