Как Hibernate / JPA сохраняет объекты в стороне от другого объекта? - PullRequest
0 голосов
/ 12 января 2012

У меня есть три класса (Дом, Комната, Адрес), которые являются постоянными (Отображается с помощью JPA / Hibernate)

@Entity
@Table(name = "HOUSE")    
@AttributeOverrides({@AttributeOverride(name = "house_id", column = @Column(name =     "house_id"))})
  public class House{


     @Basic     
     private String key;
     @OneToMany(mappedBy = "house", cascade = {CascadeType.ALL},    orphanRemoval = true)
     private List<Room> rooms;

        @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST})
        @JoinColumn(name = "add_id")
        private Address address;
}

 public static void main(String args){
 String key="key1";
 Room room1=...
 Room room2=...
 List<Room> rooms=//add the two rooms
 .
 .
 House house= new House(key, rooms, address);

 // Here is my question.
 // Now I call the save method on the persistent class

  house.save();
}

1) Будут ли объекты Address и Room сохраняться автоматически или мне придется вызывать метод save для каждого из них (room1.save(), room2.save(), address.save()) перед вызовом house.save()? Как насчет того, когда я удаляю дом obj?

2) Класс «дом» является вершиной иерархии. Я понял, что если мы вызовем сохранение объекта-владельца, оно сохранит номер и адрес. Как насчет обратного? Если я отредактировал комнату, как мне убедиться, что «дом» знает об этом?

Ответы [ 2 ]

2 голосов
/ 12 января 2012

не так, как вы его настроили.вам нужно пометить одного из ваших участников в каждой сущности как идентификатор с аннотацией @Id.Затем вам нужно отобразить, как ваши составные сущности связаны друг с другом.Это делается с помощью различных аннотаций, таких как @OneToMany и @ManyToOne.

Наконец, если вы хотите иметь возможность сохранять составные сущности, просто вызывая hibernateSession.save с сущностью-владельцем во взаимосвязи, всете сущности, которыми он владеет, должны быть помечены каскадным сохранением, чтобы постоянные находились в каскаде вниз по дереву владения.

0 голосов
/ 12 января 2012

Вы используете аннотации для предоставления метаданных сопоставления, но ничего не сказали Hibernate о сопоставленных коллекциях. При нынешнем состоянии Hibernate не будет сохранять адреса или номера.

...