【问题标题】:How to display data from 2 tables in JSP page如何在 JSP 页面中显示 2 个表中的数据
【发布时间】: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;


    }

}

【问题讨论】:

    标签: mysql hibernate jsp


    【解决方案1】:

    问题有两个方面。首先我在@JoinColumn 中设置了错误的值。该值应该引用我试图从中获取数据的表的主键。在我的情况下,Numbers 表正在尝试访问 Users 表,因此引用应该是“id”字段。

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

    其次,在我的 JSP 文件中,我需要确保引用正确的变量来检索数据。在这种情况下,变量将是用户 ID。此外,引用区分大小写。 JSP 文件应该有这个引用。

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

    这让我可以在 JSP 文件中显示我想要的数字和用户名值。

    【讨论】:

      【解决方案2】:
      1. 在多对一关系中添加@ManyToOne(fetch = FetchType.EAGER)

      2. 同样在 JSP 中,用于获取用户名,更改 ${numbers.username} 到 ${numbers.username.username}

      【讨论】:

      • 试过了,但是 ${numbers.username.username} 数据的 JSP 仍然是空白
      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多