Я пытаюсь изучить JPA с Hibernate и привязать его к GUI, встроенному в Netbeans с Beans Binding. Это приложение со списком собак. У каждой собаки может быть от одного до многих щенков. Вы можете добавлять и удалять собак, а для каждой собаки вы можете добавлять и удалять щенков.
Собаки отображаются в JList, когда пользователь выбирает собаку, ее свойства отображаются в JTextFileds, а ее щенки отображаются в JTable. Добавление / удаление собак работает нормально, поскольку список, содержащий экземпляры собак, можно наблюдать.
Собаки-щенки содержатся в классе Коллекции собак с геттером и сеттером:
@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 привязан к JList (а не к списку собак) с $ {selectedElement.puppies} в качестве выражения привязки.
Установщики в свойстве огня класса Puppie изменяются при установке свойств.
Это код для добавления щенка:
@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);
}
Любая помощь будет принята с благодарностью! Дайте мне знать, если вам нужна дополнительная информация.
С уважением,
Хенрик