2012-01-16 3 views
2

У меня есть примерно 100 000 объектов, которые я хочу вставить в базу данных. Я хотел бы использовать Spring/Hibernate и создать List<MyPojo> и использовать session.saveOrUpdate() для выполнения вставки.Spring/Hibernate - Как вставить запись с помощью идентификатора внешнего ключа?

Однако объект MyPojo содержит около 25 внешних ключей. Для выполнения многих поисков по Id для получения фактического ссылочного объекта было бы крайне неэффективно.

Поэтому я хотел бы просто использовать идентификаторы внешнего ключа (так же, как это было бы сохранено в базе данных), а не загружать каждый объект.

За пределами собственных запросов, есть ли другое решение для этого?

Спасибо!

+0

Является ли это частью домашней работы? или свое собственное исследование. Потому что с таблицей с 25 внешними ключами трудно поверить. Я бы серьезно подумал сначала нормализовать/перепроектировать мою схему базы данных. – Gaurav

+0

Это существующая таблица, и аргументация за ней выходит за рамки. Мне просто интересно, можно ли это сделать с помощью Spring/Hibernate. – user973479

ответ

2

Вы можете сделать это, сопоставляя внешний ключ и объект, но отмечая объект как ленивый, а не «обновляемый», а не «вставляемый».

Это объект, но не используемый для записи значений.

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "MY_POJO_FK", insertable = false, updatable = false) 
private MyPojo myPojo; 

Ниже внешнего ключа отображается нормально

@Column(name = "MY_POJO_FK") 
private Long myPojoFK; 

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

Если вы только сопоставляете это, чтобы записывать данные, вам не нужно беспокоиться о картировании объекта вообще.

+0

Это похоже на то, что я ищу. Я попробую. Благодаря! – user973479

Смежные вопросы