【发布时间】:2016-09-11 13:22:08
【问题描述】:
我是 Hibernate 和 Spring MVC 的新手。我正在创建一个 Web 应用程序,我想在其中显示所有电话号码的列表以及分配给每个号码的用户名。有 2 个表 - 一个用于数字,另一个用于用户。每个都由 id 索引。用户 ID 是数字表中的外键。当我尝试在 JSP 页面中显示名称时,我得到的只是用户的 id 表示,而不是返回数字列表时的名称值。是否有一个标准的休眠 CRUD 示例可以创建列表以包含用户的名称值而不是其 ID。表示?如果没有,有人可以帮我为此创建正确的查询程序吗?
我正在使用 Java 1.8、Spring 4.2.5、MySQL 5.7 和 Hibernate 5.0.1 以及使用 Eclipse Mars IDE 的 Tomcat 8。
实体类:
@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
由于“userid”不是 Numbers 类的属性,并且如果在 JSP 中使用 numbers.username,表格字段为空白,因此我无法在 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;
}
}
【问题讨论】: