【问题标题】:Play Framework 2.0 Ebean ArrayList NullPlay Framework 2.0 Ebean ArrayList Null
【发布时间】:2014-01-14 02:42:12
【问题描述】:

在 Java 版本的 Play Framework 2.0 中,我试图将我的一个名为 Post 的类的 ArrayList 保存在我的另一个类 ForumThread 中。现在,在ForumThread 的构造函数中,我创建了一个新的Post 并将其添加到帖子的ArrayList 中,然后保存我的数据库。但是,在我保存 ForumThread 的任何实例后,Posts 的 ArrayList 变为空。当我呈现页面时,这会导致错误,我的问题是双重的。

1) 如何使我的ForumThread 的帖子数组列表在保存后不为空?

2) 为什么一保存就变成null了。

所有相关代码都在下面,作为说明,我尝试使用 @ManyToOne 和 @OneToMany 注释但没有成功,这是尝试之前的代码。

论坛线程.java

package models;

import java.util.*;
import controllers.*;
import play.db.ebean.*;
import play.data.validation.Constraints.*;

import javax.persistence.*;

@Entity
@Table(name="threads")
public class ForumThread extends Model{

    @Id
    public long id;

    @Column
    @Required
    public String title;

    @Column
    public User creator;

    @Column
    public List<Post> posts  = new ArrayList<Post>();

    public String initialMessage;

    public static play.db.ebean.Model.Finder<Long, ForumThread> find = new Finder<Long, ForumThread>(Long.class, ForumThread.class);

    public ForumThread(User creator, String title, String initialMessage) {
        this.creator = creator;
        this.title = title;
        Post initialPost = new Post(creator, initialMessage, title);
        this.posts.add(initialPost);
    }

    public static void create(ForumThread thread){
        thread.save();
    }

    public static List<ForumThread> all(){
        return find.all();
    }
}

Post.java

package models;

import java.util.*;

public class Post{
    public User poster;
    public String message;
    public String title;

    public Post(User poster, String message, String title){
        this.poster = poster;
        this.message = message;
        this.title = title;
    }
}

【问题讨论】:

    标签: java arraylist playframework playframework-2.0 ebean


    【解决方案1】:

    打开 ebean 数据库日志记录。见这篇文章:play framework Logging ebean SQL statments

    然后你就可以看到ebean在做什么了。

    【讨论】:

      【解决方案2】:

      看起来您的 Posts 课程只是一个 POJO。应该扩展Model,还应该有@Entity@Table等注释。

      【讨论】:

        【解决方案3】:

        为确保所有内容都能正确推断,请在 ForumThread 和 Post 之间实现双向关系,指示将帖子映射到线程的属性并使用级联保存:

        @Entity
        public class ForumThread extends Model{
            ...
            @OneToMany(mappedBy="thread",cascade=CascadeType.ALL)
            public List<Post> posts;
            ...
        }
        
        
        @Entity
        public class Post extends Model{
            ...
            @ManyToOne
            public ForumThread thread;
            ...
        }
        

        请参阅 ebean 用户指南http://www.avaje.org/doc/ebean-userguide.pdf

        【讨论】:

          猜你喜欢
          • 2012-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多