2016-05-15 128 views
1

我是Hibernate和Spring MVC的新手。我正在創建一個Web應用程序,我希望顯示所有電話號碼的列表以及分配給每個號碼的用戶名。有兩個表格 - 一個用於數字,另一個用於用戶。每個都由id索引。用戶標識是數字表中的外鍵。當我嘗試在JSP頁面中顯示名稱時,我獲得的是用戶的id表示,而不是返回數字列表時的名稱值。是否有一個標準的hibernate CRUD示例會創建List以包含用戶的名稱值而不是其ID。表示?如果沒有,有人可以幫我創建正確的查詢過程嗎?如何在JSP頁面顯示來自2個表的數據

我正在使用Eclipse Mars IDE和Tomcat 8一起使用Java 1.8,Spring 4.2.5,MySQL 5.7和Hibernate 5.0.1。

實體類:

@Entity 
@Table(name="Numbers") 
public class Numbers { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="id", unique=true, nullable=false) 
    private Long id; 
    @Column(name="Number", nullable=false) 
    private String Number; 
    @Column(name="UserID", nullable=false) 
    private Long UserID;  
    @ManyToOne 
    @JoinColumn(name="FK_NUMBERS_USER") 
    private Users Username; 

//getters & setters 
} 

@Entity 
@Table(name="Users") 
public class Users { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="id", unique=true, nullable=false) 
    public Long id; 

    @Column(name="Username", unique=true, nullable=false) 
    public String Username; 

     //getters & setters 
} 

控制器代碼:

@RequestMapping(value="/numbers", method = RequestMethod.GET) 
    public ModelAndView getAllNumbers() { 

     List<Numbers> allNumbers = numbersService.findAllNumbers(); 

     ModelAndView model = new ModelAndView("numbers"); 
     model.addObject("numbers", allNumbers); 

return model; 
} 

服務接口:

public interface NumbersService { 

    void saveNumber(Numbers number); 
    void deleteUser(Numbers number); 
    List<Numbers> findAllNumbers(); 

} 

JSP文件C:的foreach:

table border="1"> 
      <tr> 
       <th>Number</th> 
       <th>Username</th>  
      </tr> 
      <tbody> 
       <c:forEach items="${numbers}" var="numbers"> 
        <tr> 
         <td>${numbers.id}</td> 
         <td>${numbers.number}</td> 
         <td>${numbers.username}</td> 
        </tr> 
       </c:forEach> 
       </tbody>    
      </table> 
從控制器

控制檯輸出處理時,查詢號碼:

Number ID  Number  User ID 
1   12055551212 1 
2   12065551212 2 
3   12075551212 1 

我不能得到得到應有的JSP頁面上相同的輸出「用戶id」如果使用號碼的數字類,而不是一個性質。 JSP中的用戶名錶格字段爲空。如何獲取JSP文件中的名稱?

DAO實現:

package com.voip.service.impl; 


import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 

import com.voip.dao.NumbersDAO; 
import com.voip.domain.Numbers; 
import com.voip.domain.Users; 
import com.voip.service.NumbersService; 


public class NumbersServiceImpl implements NumbersService { 


    @Autowired 
    private NumbersDAO numbersDAO; 


    @Override 
    public List<Numbers> findAllNumbers() { 

     List<Numbers> allNumbers = (List<Numbers>) numbersDAO.findAll(); 
     return allNumbers; 


    } 

} 

回答

1

這個問題是兩倍。首先,我在@JoinColumn中設置了錯誤的值。該值應引用我試圖從中獲取數據的表的主鍵。在我的情況下,Numbers表試圖訪問Users表,因此引用應該是「id」字段。

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name="userid") 
private Users userID; 

其次,在我的JSP文件中,我需要確保引用正確的變量來檢索數據。在這種情況下,變量將是用戶ID。另外,參考是區分大小寫的。 JSP文件應該有這個引用。

<td>${numbers.userID.username}</td> 

這使我可以在JSP文件中顯示我想要的數字和用戶名值。

0
  1. 在多對一的關係添加@ManyToOne(fetch = FetchType.EAGER)

  2. 而且在JSP中,用於獲取用戶名,更改 $ {} numbers.username爲$ {numbers.username。用戶名}

+0

試過這個,但JSP對於$ {numbers.username.username}數據仍然是空白的 –

相關問題