【问题标题】:adding an object to a list in play framework将对象添加到播放框架中的列表
【发布时间】:2012-04-27 10:23:18
【问题描述】:

我是新手,每当我使用 list.add(Object) 到列表并打印列表的大小时,它仍然是 0 !!!

我的方法是点赞一个教程,它会检查登录的用户之前是否喜欢过这个教程,如果是的话,它会将教程的likeCount加一,并将该教程添加到用户的点赞列表中。如果不是,则说明他已经喜欢了。 由于教程没有保存在列表中,我无法检查它是否已经被喜欢!!!

型号:

    @Entity
    public class RegisteredUser extends Model {
public String name;
    @ManyToMany 
public List<Tutorial> contributedTutorials;

     public RegisteredUser(String name) {
     this.name = name;
     this.likeList = newArrayList<Tutorial>();
     this.save();
     }
     }

    @Entity
    public class Tutorial extends Model {
public  String Title;
    public int likeCount;
    public Tutorial(String title) {
    this.title = title;
    this.likeCount = 0;
    }

控制器: 公共教程扩展控制器{ 公共静态无效 likeTutorial() {

   if (session.get("RegisteredUserId") != null && session.get("tutID") != null ) {
    {   
        long uId = Long.parseLong(session.get("RegisteredUserId"));
        RegisteredUser user = RegisteredUser.findById(uId);
        long tId = Long.parseLong(session.get("tutID"));
        Tutorial tut = Tutorial.findById(tId);
        int x = tut.likeCount;
        x++;
        if (!(user.likeList.contains(tut))) 
            // to check that this user didn't like this tut before
        { 
            Tutorial.em().createQuery("update Tutorial set likeCount ="+ x +" where id=" +tId).executeUpdate();
            tut.refresh();
            user.updateLikeList(tut); // THIS IS NOT WORKING!!!
            renderText("You have successfully liked this Tutorial " + user.likeList.size());
        } 
        }
        renderText("Opps Something went Wrong!!");
    }
}
}

观点:

     <a href="@{Tutorials.likeTutorial()}">Like </a>  

【问题讨论】:

  • 失败部分的代码在哪里,user.updateLikeList(tut); ?
  • @OHAssan 我的意思是我们需要查看 user.updateLike 的代码,因为那是失败的
  • @Pere Villega 这里是 public void updateLikeList(Tutorial t) { this.likeList.add(t); this.refresh(); }

标签: list jpa playframework


【解决方案1】:

+你不需要在构造函数中调用this.save()this.likeList = newArrayList&lt;Tutorial&gt;();。实际上后者在语法上是错误的。

+将教程 ID 作为会话变量传递是非常错误的。您需要将其作为 GET 参数传递给操作。

+将您的支票替换为:

// to check that this user didn't like this tut before
if (! user.likeList.contains(tut)) {
    // Tutorial.em().createQuery("update Tutorial set likeCount ="+ x +" where id=" +tId).executeUpdate();
    // tut.refresh();
    // user.updateLikeList(tut); // THIS IS NOT WORKING!!!
    tut.likeCount++;
    tut.save();

    // Since it's a ManyToMany relationship, you only need to add it to one list and the other will reflect properly if mappedBy properly
    user.likeList.add(tut); // note that the example you showed uses contributedTutorials not likeList
    user.save();

    renderText("You have successfully liked this Tutorial " + user.likeList.size());
} 

【讨论】:

    【解决方案2】:

    我做了你上面提到的所有调整

    并且 RegisteredUser 模型中的映射

    @ManyToMany
    public List<Tutorial> likeList;
    

    我已将映射添加到教程模型

        @ManyToMany  
        public List<RegisteredUser> likersList;
    

    并在控制器中调整方法如下

    if (! user.likeList.contains(tut)) {
    
    tut.likeCount++; 
    //tut.likersList.add(user); // however this raised an error too! at the next line
    tut.save();
    //as for the likeCount update, it has worked perfectly, Thank You
    
    // Since it's a ManyToMany relationship, you only need to add it to one list and the other will reflect properly if mappedBy properly 
    //I have modified Model Tutorial as shown above and it didn't work too !
    user.likeList.add(tut); 
    user.save(); // this raised an error!! 
    
    renderText("You have successfully liked this Tutorial " + user.likeList.size());
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多