如何为与JPA有一对多关系的对象创建控制器?

时间:2015-11-17 15:54:20

标签: java spring-mvc jpa

如果我有两个豆子,一个用于团队,另一个用于玩家。没有球员,球队不能存在,球员必须属于球队。如果我的两个bean基本上被声明它们是如何在下面(假设存在getter和setter)。如果我遵循MVC设计模式,那么设计控制器或托管bean的最佳实践是将这些对象持久保存到数据库中吗?网站将在提交时询问团队的名称和球员在同一时间的名字。我需要两个托管bean,一个用于播放器,一个用于团队?或者我只需要一个团队的托管bean,因为团队拥有玩家?

@Entity
@Table(name = 'teams')
public class Team {

  @Id
  @GeneratedValue
  private Integer id;

  private String name;

  @OneToMany(mappedBy='team', cascade=CascadeType.ALL)
  private List<Player> players = new ArrayList<Player>();
}

@Entity
@Table(name = 'players')
public class Player {

  @Id
  @GeneratedValue
  private Integer id;

  private String lastname;

  @ManyToOne
  @JoinColumn(name = 'team_id')
  private Team team;
}

2 个答案:

答案 0 :(得分:0)

我会按功能将其分组到控制器中,而不是通过实体bean。所以,一个控制器就足够了。

选择名称一直是编程中最棘手的部分之一:)你可以选择TeamControllerPlayerController,看看哪种更适合。

答案 1 :(得分:0)

对我来说,像这样创建一个新的托管bean

public class TeamBean {
     public String nameTeam;
     public list<String> namePlayer;
     // getter & setter

在你的jsp中

<input .. name="nameTeam"> //team name
// the important is the attribute name must be the same as your managedbean
<input .. name="namePlayer"> //player 1 name
<input .. name="namePlayer"> //player 2 name

...

你的控制器就像这样

@Controller
public class YourController {
    ....

    @RequestMapping(...) 
    public String save-team(@ModelAttribute TeamBean teamBean , HttpServletRequest request) {
        // now you have the object teamBean you can persist it in your db
        // for example
        Team team = yourTeamDAO.save(new Team(teamBean.nameTeam))
        for(Player p : teamBean.namePlayer){
             yourPlayerDAO.save(new Player(p,team))    
        }
        //just declare in your entities the constructors that i have used `new Player(...)` , `new Team(..)`
    }