1

上記のデータ構造を呼び出すと、スタックとしてインスタンス化されたときに nullPointerException が返されるが、リストとしてインスタンス化されたときには返されないという奇妙な問題があります。

スタッククラスで実行すると、ユニットテストとプレイWebサーバーの実行の両方でnullPointerExceptionが発生します

これは機能します:

....

/*
 * comment belongs to post, and if post is deleted,
 * the deletion is relayed to all comments that post object
 * owns
 */
@OneToMany (mappedBy="post",cascade=CascadeType.ALL)
public List<Comment> comments;

....

public Post(SuperUser author,String content,String title){
    this.comments = new LinkedList<Comment>();
    this.author = author;
    this.content = content;
    this.title = title;
    this.postedAt = new Date();

}

...

public Post addComment(Comment newComment){
    this.comments.add(newComment);
    this.save();
    return this;
}

これは動作しません:

....

/*
 * comment belongs to post, and if post is deleted,
 * the deletion is relayed to all comments that post object
 * owns
 */
@OneToMany (mappedBy="post",cascade=CascadeType.ALL)
public Stack<Comment> comments;

....

public Post(SuperUser author,String content,String title){
    this.comments = new Stack<Comment>();
    this.author = author;
    this.content = content;
    this.title = title;
    this.postedAt = new Date();

}

...

public Post addComment(Comment newComment){
this.comments.push(newComment); // ERROR
    this.save();
    return this;
}

List インターフェイスのラッパー インターフェイスを作成して、メソッドを指定してみました。

public E push(E elem);

しかし、それもうまくいきません。

これが何であるか考えていますか?

4

1 に答える 1

1

エンティティの関連付けのタイプとして具象クラスを使用することはできません。インターフェイスのみ: List、Set、Map。ORM は、これらのインターフェイスの独自の具体的な実装を使用して、ダーティ チェック、遅延読み込みなどを実装します。

仕様からの関連する引用:

コレクション値の永続フィールドおよびプロパティは、エンティティ クラスが上記の JavaBeans メソッド規則に準拠しているかどうか、およびフィールドまたはプロパティ アクセスが使用されているかどうかに関係なく、次のコレクション値インターフェイスのいずれかに関して定義する必要があります。 java.util.Collection 、java.util.Set、java.util.List、java.util.Map。コレクション実装型は、エンティティが永続化される前に、フィールドまたはプロパティを初期化するためにアプリケーションによって使用される場合があります。エンティティが管理される (または分離される) と、その後のアクセスはインターフェイス タイプを介して行う必要があります。

于 2013-10-10T20:58:24.180 に答える