2016-05-15 8 views
1

HibernateとSpring MVCを初めて使用しています。私はすべての電話番号のリストと各番号に割り当てられているユーザーの名前を表示するWebアプリケーションを作成しています。数字用とユーザー用の2つのテーブルがあります。それぞれidでインデックスされています。ユーザーIDは、数値表の外部キーです。 JSPページに名前を表示しようとすると、数値のリストを返すときに得られるのは、名前の値ではなくユーザーのID表現だけです。そのIDの代わりにユーザーの名前の値を含むようにListを作成する、標準のhibernate CRUDの例がありますか?表現?そうでない場合は、誰かが私の手助けをすることができますか?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 

私は「USERID」ではない数字クラスのプロパティを、使用する番号の場合に起因するJSPページで同じ出力を得ることができません。 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

問題は2倍でした。まず、@JoinColumnに間違った値を設定します。その値は、データを取得しようとしているテーブルの主キーを参照する必要があります。私の場合、NumbersテーブルはUsersテーブルにアクセスしようとしているので、参照は "id"フィールドにする必要があります。

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

第2に、私のJSPファイルでは、データを取得するための適切な変数を参照する必要がありました。この場合、変数はuserIDになります。また、参照は大文字と小文字が区別されます。 JSPファイルにはこの参照が必要です。

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

これにより、私が望むJSPファイルにNumberとUser Nameの値を表示することができました。

0
  1. ManytoOne関係JSPでも

  2. @ManyToOne(fetch = FetchType.EAGER)を追加し、ユーザ名を取得するために、$ {numbers.usernameに $ {numbers.username}を変更します。ユーザー名}

+0

これを試しましたが、JSPはまだ$ {numbers.username.username}のデータでは空白です –

関連する問題