私の例の完全なエラー行は、「[PersistenceException:org.h2.jdbc.JdbcSQLException:Parameter "#1" is not set; SQL statement:delete from class4 where(class3_id)in(?)[90012-158]]」です。
これは私の単体テストで発生していたので、それを再現するためのテストプロジェクトを作成することにしました。
基本的に、クラス1〜4があり、それぞれが1対多に関連していて、作成してから1、2、3、4、4、3、2、1の順序で削除しようとしていますが、このエラーが発生します。
クラスは番号を除いてすべて同じです(そして最後のクラスにはリストがありません
@Entity
public class Class1 extends Model{
/**
*
*/
private static final long serialVersionUID = 4322329984247299024L;
@Id
@GeneratedValue
public Long id;
@OneToMany(mappedBy="class1",cascade={CascadeType.PERSIST, CascadeType.ALL})
private List<Class2> class2s = new ArrayList<Class2>();
public Class2 add()
{
Class2 class2 = new Class2(this);
Class2.create(class2);
return class2;
}
@play.db.ebean.Transactional
public static void create(Class1 class1) {
class1.save();
}
@play.db.ebean.Transactional
public static void delete(Class1 class1) {
class1.delete();
}
}
エラーの原因となるアプリケーションコードは次のように実行されます
Class1 class1 = new Class1();
Class1.create(class1);
Class2 class2 = class1.add();
class1.add();
Class2.delete(class2);
Class1.delete(class1);
また、それが起こっていることを示すサンプルアプリケーションを添付しました。誰かが私が間違ったことを指摘できれば、または誰かが私がそれを回避する方法を知っていれば、それがAPIのバグであるなら、私は最も素晴らしいでしょう。
http://stowelly.co.uk/play-2.0.3-persistence-test.zip
ありがとうございました