特定のモデルに発生したすべての変更イベントを履歴モデルに追加したいと思います。そのために、私がしたことは次のとおりです。
class MyModel extends Model {
@Id
private Long Id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
History.add(this.getId(), "name", this.name, name);
this.name = name;
}
}
public class History extends Model {
public Long beanId;
public String field;
public String oldValue;
public String newValue;
public static void add (Long beanId, String field, String oldValue, String newValue) {
History history = new History();
history.beanId = beanId;
history.field = field;
history.oldValue = oldValue;
history.newValue = newValue;
history.save();
}
}
beanId が保存されないことを除いて、すべてが完全に機能します。理由は明らかですが、これが原因で行き詰まっています。
理由 ?これは、コントローラーのフォームを介してこれらの値を設定したためです(更新メソッド内):
Form<MyModel> form = form(MyModel.class).bindFromRequest();
MyModel model = form.get();
これによりbindFromRequest()
、id を設定せずに (もちろん) MyModel に値を設定するため、this.getId()
null になります。
getId()
モデルの対応する ID を取得するにはどうすればよいですか?
(注:作成、チェックなどを削除して、問題を単純化しました)。