2016-07-26 64 views
0

我想節省1的用戶表中的值是引用管理員表adminId對用戶表插入的1對被引用管理表冬眠

一個外鍵的用戶表中的值我user.java我有這個

@OneToOne 
    @JoinColumn(name = "adminId") 
    Admin admin; 

這是上述映射到user.java引用管理表

public Admin getAdmins() { 
     return admin; 
    } 

    public void setAdmin(Admin id) { 

     this.admin = id; 
    } 

在我的DAO類SpringBoot APPLICA的getter和setter重刑,我堅持給用戶的表像這樣

public void save(User user) { 
     Admin admin = (Admin)getSession().createQuery("from Admin a where a.adminId = ?") 
       .setParameter(0, 1); 
       user.setAdmin(admin); 

     getSession().save(user); 
    } 

EDITTED: 這是我正在試圖保存用戶

public void save(User user) { 
     long id = 1 ; 

     Admin admin = (Admin)getSession().createQuery("from Admin a where a.adminId = ?").setParameter(0, 1).list().get(0); 
     user.setAdminz(admin); 

     getSession().save(user); 
    } 

這是節省活動

@RequestMapping(value = "/create-user", method = RequestMethod.POST) 
    public ModelAndView createUser(HttpServletRequest request, 
            HttpServletResponse response, 
            @RequestParam String name, 
            @RequestParam String email) { 
     try { 
      // create new user object 
      User user = new User(); 
      user.setName(name); 
      user.setEmail(email); 
      user.setTimestamp(new Date().getTime()); 

      // save user in db (if new) 
      if (_userDao.getByEmail(email) == null) { 
       _userDao.save(user); 
      } 
我的控制器代碼

當我嘗試保存時出現此錯誤

com.xxx.MainController  [0;39m [2m:[0;39m Exception in creating user: 

我已經修改了我的映射到這個不接受爲空的

@OneToOne 
    @JoinColumn(name = "adminId",nullable = false) 
    Admin admin; 

如果我刪除可空=虛假註釋,NULL值保存到用戶表的adminId領域。

請問我做錯了什麼?請協助。

回答

0

你必須執行查詢

Admin admin = (Admin)getSession().createQuery("from Admin a where a.adminId = ?").setParameter(0, 1); 

你的IDE應該提醒你注意這條線,因爲你不能投Hibernate查詢到您的管理,只要鍵入,如果你沒有把它落實到管理類,如果你這樣做,那是錯誤的...

此代碼不是獲取單個元素的最佳做法,但您必須使用list()方法執行查詢。並從列表中獲取您的元素。

Admin admin = (Admin)getSession().createQuery("from Admin a where a.adminId = ?").setParameter(0, 1).list().get(0) 
//Warning! If list is empty, there will be an error. 

如果你想從數據庫中選擇使用hibernate(和地圖與實體)的單個元素,我建議你使用這段代碼。

Admin admin = getSession().get(Admin.class, 1); 
+0

方法的getCurrentSession()是未定義的類型的UserDAO >>>>這是錯誤,現在我得到 –

+0

慚愧是的getSession(),我打字錯誤已經修改。 –

+0

好的。我正在這樣做Admin Admin =(Admin)getSession()。get(Admin.class,1); –