Hibernate を使用して JPA を学習し、それを Beans Binding を使用して Netbeans に組み込まれた GUI にバインドしようとしています。犬一覧アプリです。各犬は、1 匹から多数の子犬を持つことができます。犬を追加および削除でき、犬ごとに子犬を追加および削除できます。
犬は JList に表示されます。ユーザーが犬を選択すると、そのプロパティが JTextFileds に表示され、その子犬が JTable に表示されます。Dog インスタンスを含むリストは監視可能であるため、犬の追加/削除は正常に機能します。
Dogs の子犬は、getter と setter を使用して Dog クラスの Collection で維持されます。
@OneToMany(targetEntity = Puppie.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "dog_id")
private Collection<Puppie> puppies;
public Collection<Puppie> getPuppies() {
if (puppies == null) {
puppies = new ArrayList<Puppie>();
}
return puppies;
}
public void setPuppies(Collection<Puppie> puppies) {
Collection<Puppie> oldPuppies = this.puppies;
this.puppies = puppies;
changeSupport.firePropertyChange("puppies", oldPuppies, puppies);
}
JList で選択した犬に子犬を追加しても、すぐに JTable に反映されません。JTable に表示されるようにするには、別の犬を選択してから、子犬を追加した犬を再度選択する必要があります。Dog クラスで次の子犬の追加/削除メソッドを使用しています。
public void addPuppie(Puppie puppie) {
getPuppies().add(puppie);
}
public void deletePuppie(Puppie puppie) {
getPuppies().remove(puppie);
}
JTable は、バインド式として ${selectedElement.puppies} を使用して JList (犬リストではなく) にバインドされます。
パピー クラスのセッターは、プロパティが設定されると、プロパティの変更を発生させます。
これは子犬を追加するためのコードです:
@Action
public void addPuppy() {
Puppie p = new Puppie();
p.setName("new puppie");
entityManager.persist(p);
int selectedIndex = dogsJList.getSelectedIndex();
Dog d = (Dog) dogList.get(selectedIndex);
d.addPuppie(p);
setSaveNeeded(true);
}
どんな助けでも大歓迎です!さらに情報が必要な場合はお知らせください。
よろしく、ヘンリック