Если вы не каскадируете поле, вы должны использовать @Transient? - PullRequest
0 голосов
/ 14 марта 2012

Чтобы проиллюстрировать мой вопрос, рассмотрим следующий пример:

@Entity
public class Box implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @OneToMany //No cascade
    private List<Item> items;

    .
    .
    .
}

Выше у нас есть Box, который имеет связь один-ко-многим с Item

Теперь скажите, что вы захватили Box объект и начали заполнять его Item s и попытались сохранить его.Он скажет вам, что вы не можете сделать это, потому что у вас есть какие-то непереходные вложенные объекты без каскада (или что-то в этом роде).

В этой ситуации, когда вам нужна только ассоциация (без сохранения),но вы хотите использовать эти поля, пока объект жив, что вы делаете, когда хотите сохранить его?

Вы обнуляете список Item?Вы аннотируете это @Transient?

Это мой вопрос.Спасибо!

1 Ответ

1 голос
/ 14 марта 2012

Если ваш объект Item не является объектом базы данных, вы должны аннотировать коллекцию как @Transient. Если объект Item отображается в базе данных, вы должны использовать аннотацию @OneToMany, чтобы эта коллекция была считана из базы данных. Чтобы предотвратить сохранение этой коллекции при сохранении объекта Box, вы можете добавить аннотацию @JoinColumn и установить для вставляемого и обновляемого атрибута значение false:

@OneToMany
@JoinColumn((name="BOX_ID", insertable=false, updatable=false)
private List<Item> items;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...