我正在開發註冊操作,其中用戶輸入他的電子郵件和密碼按提交(createUser方法)按鈕,用戶實體得到持久並設置用戶在HttpSession中的ID,接下來他轉到下一個jsf,在那裏輸入學校對象(實體)的信息。我的問題是,用戶得到堅持,但學校不是。這裏是我的代碼:爲HttpSession設置屬性後,它變爲空
public CreateBn() {
user = new User();
school = new School();
adress = new Adresse();
school.setAdresse(adress);
facesContext = FacesContext.getCurrentInstance();
session = (HttpSession) facesContext.getExternalContext().getSession(false);
}
public String createUser() {
initialiserDateInscription();
session.setAttribute("UserId", user.getId());
//System.out.println((BigInteger) session.getAttribute("UserId"));
userPr.createUser(user);
return SHCOOL_INSCRIPTION;
}
public String createSchool() {
BigInteger userId = (BigInteger) session.getAttribute("UserId");
System.out.println("MEHDI : " + userId);
try {
User userTemp = userPr.getUserById(userId);// Here is the problem
school.setUser(userTemp);
} catch (Exception e) {
e.printStackTrace();
}
session.setAttribute("SchoolId", school.getId());
school.setAdresse(adress);
schoolPr.createSchool(school);
return INSCRIPTION_RETURN;
}
,你可以看到,我得到了用戶實體基於保存在會話中的用戶ID,但我什麼也沒有,它說:
javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.
任何更多的信息,我在這裏。那麼我該如何解決這個問題呢?
@Entity
@Table(schema = "school", name = "school")
public class School implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private BigInteger id;
private String name;
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "userId")
private User user;
@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.PERSIST)
@JoinColumn(name = "adressId")
private Adresse adresse;
EJB
@Stateless
public class UserPr {
@PersistenceContext(unitName = "proj")
private EntityManager em;
public void createUser(User user) throws RuntimeException{
try {
em.persist(user);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public User getUserById(BigInteger UserId) throws Exception{
try{
return em.createNamedQuery("User.findById", User.class).setParameter("id", UserId).getSingleResult();
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
@NamedQueries({
@NamedQuery(name="User.findById", query="SELECT u FROM User u WHERE u.id = :id")
})
public class User implements Serializable {
你可以發佈userPr類的代碼嗎? – 2014-09-22 10:01:42
另外,正如我在您發佈的代碼中所看到的那樣,當您調用createUser函數時,您不會在用戶對象中設置任何內容。即你不呼叫某處user.id = id。也許,你在我看不到的部分代碼中實現了這一點。在數據庫中,用戶對象是否正確保存? – 2014-09-22 10:06:45
用戶得到堅持在DB中,我看到表更改。問題在於設置UserId並從會話中獲取。 enity用戶在構造函數中初始化,所以我只需要持久 – user3923327 2014-09-22 10:07:38