私はEntryエンティティとCommentエンティティを持っています。エントリーエンティティはコメントエンティティにOneToMany関連を持っている:休止状態で大きなコレクションを扱う方法
/deleteComment?entryId=5&commentId=7
私のアプローチは、コントローラで次のようになります。
@Entity
@Table(name="entries")
public class Entry {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@OneToMany(mappedBy = "entry", cascade = CascadeType.ALL, orphanRemoval = true)
@LazyCollection(LazyCollectionOption.EXTRA)
private List<Comment> comments = new ArrayList<>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Comment> getComments() {
return comments;
}
public boolean containsComment(int commentId) {
return comments.contains(commentId);
}
public Comment getComment(int commentId) {
return comments.get(commentId);
}
public void removeComment(Comment comment) {
comments.remove(comment);
}
}
@Entity
@Table(name="comments")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int id;
@ManyToOne
private Entry entry;
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public Entry getEntry() {
return entry;
}
public void setEntry(Entry entry) {
this.entry = entry;
}
}
は、バックエンドに次のリクエストを送信している私は単一ページのアプリケーションを持っていると仮定しましょうentryIdパラメータでエントリを取得します。 私はEntry-entityに対してcontainsComment()メソッドを呼び出すよりも、commentIdリクエストパラメータを渡すメソッドが必要です。コレクションに指定されたIDを持つコメントが含まれている場合はtrueになります。 trueの場合、getComment()メソッドを呼び出してCommentエンティティを取得します。 最後に、commentエンティティをパラメータとしてremoveComment() - メソッドを呼び出します。
PHP Doctrineでは、私はこのアプローチがうまくいったと思います。これは、休止状態で正しい方法ですか?サンプルコードで
私はcontainsComment()メソッドを呼び出した場合、私は、次の例外を取得:コメントはすぐに大規模なコレクションを取得することができますので、私はEXTRA-LAZYで動作
org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [public int com.mypackage.Comment.id] by reflection for persistent property [com.mypackage.Comment#id] : 7
注意。