2013-05-08 113 views
1

我試圖獲取元素集合時遇到了一個問題:Friend集合爲空。休眠:獲取集合

有3類:

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

當我試圖讓所有的朋友的用戶,收集是空的。

這裏的文件,其中添加關係的方法是:

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代表什麼? 不是用戶只需要持有一組用戶設置? 從數據庫的角度來看,關係表是必需的,但不在你的java模型中。

如果我是你,我會刪除這個類並使用hbm2dll工具來生成一個正確的匹配數據庫模式。

你可以指定你的Hibernate和JARS版本,並給我們你的休眠配置文件來檢查它。

+0

謝謝你的回答。我改變了我的全球結構,而不使用friendFK。現在它正在工作! – fchenebault 2013-05-13 08:09:27