2013-05-08 4 views
1

요소 집합을 가져 오는 동안 문제가 발생했습니다 : 친구 세트는 비어 있습니다.최대 절전 모드 : 모음 가져 오기

@Entity 
@Table(name="USER") 
public class User { 
@Id 
@Column(name="USER_ID", nullable=false) 
private String mail; 

@Column(name="PASSWORD") 
private String password; 

@Column(name="SURNAME") 
private String surname; 

@Column(name="NAME") 
private String name = null; 

@Column(name="STATUT") 
private StatutUser statut; 

@Column(name="PHONENUMBER") 
private int phoneNumber; 

@OneToMany(cascade = CascadeType.PERSIST, mappedBy="friendPK.friend") 
@Fetch(FetchMode.JOIN) 
    private Set<Friend> friends = new HashSet<Friend>(); 

    ... 
    Some getters and setters 

두 번째 :

@Entity 
@Table(name = "FRIEND") 
public class Friend 
{ 

@EmbeddedId 
public FriendPK friendPK; 

@Column(name = "FRIEND_STATUT") 
private StatutFriend statutFriend; 

... 
} 

마지막 하나

@SuppressWarnings("serial") 
@Embeddable 
public class FriendPK implements Serializable{ 

    @ManyToOne 
    @JoinColumn(name="USER1_ID", referencedColumnName="USER_ID") 
    protected User user1; 

    @ManyToOne 
    @JoinColumn(name="USER2_ID", referencedColumnName="USER_ID") 
    protected User friend; 
} 

나는 모든 친구 '사용자를 얻으려고 컬렉션

가 3 종류입니다 비었다. 관계를 추가하는 방법입니다

여기에 파일이있다 :

private EntityManagerFactory emf; 
private EntityManager manager; 

public String addFriends(String mail1, String mail2){ 

     EntityTransaction t; 
     t = manager.getTransaction(); 

     try{ 
      t.begin(); 

      User user = manager.find(User.class, mail1); 

      User friend = manager.find(User.class, mail2); 

      Friend f = new Friend(); 
      f.setStatutFriend(StatutFriend.TOCHECK); 
      FriendPK friendPK = new FriendPK(); 
      friendPK.setFriend(friend); 
      friendPK.setUser1(user); 
      f.setFriendPK(friendPK); 

      Set<Friend> relationship = new HashSet<Friend>(); 
      relationship = user.getFriends(); 
      relationship.add(f); 

      Set<Friend> relationship2 = new HashSet<Friend>(); 
      relationship2 = friend.getFriends(); 
      relationship2.add(f); 

      user.setFriends(relationship); 
      friend.setFriends(relationship2); 

      manager.persist(user); 

      t.commit(); 
      error.setReq(StatutReq.DONE); 
     } 
     catch(Exception e){ 
      error.setReq(StatutReq.ABORTED); 
      error.setError(e.getMessage()); 
     } 
     finally 
     { 
      if (t.isActive()) 
      { 
       t.rollback(); 
      } 
     } 

내 코드에 관대주십시오 ... 저는 초보자입니다! 고마워요.

답변

0

처음에는 아키텍처가 이상해 보이지만 코드가 올바르다. 클래스 friendFK는 무엇을 의미합니까? 사용자가 사용자 집합 만 있으면됩니다. 설정? 데이터베이스 관점에서 관계형 테이블은 필요하지만 자바 모델에는 필요하지 않습니다.

만약 내가 너라면이 클래스를 삭제하고 hbm2dll 도구를 사용하여 올바른 데이터베이스 스키마를 생성 할 수 있습니다.

Hibernate와 jars 버전을 지정하고 그것을 확인하기 위해 최대 절전 모드 구성 파일을 제공 할 수 있습니까?

+0

답장을 보내 주셔서 감사합니다. friendFK를 사용하지 않고 내 글로벌 구조를 변경했습니다. 그리고 지금은 효과가 있습니다! – fchenebault

관련 문제