2016-09-14 3 views
1

Я новичок в Hibernate JPA ..... У меня есть одна родительская таблица и несколько дочерних таблиц. Я хочу вставить запись в дочерние таблицы на основе родительской таблицы существования. не хотите вставлять какую-либо запись в родительскую таблицу. Если запись существует в родительской таблице, я хочу вставить ее в дочернюю таблицу. Я попытался с возможностью вставки и обновления в первичный ключ родительской таблицы как false. Но это не работает. Я использую версию JPA 2.0. Спасибо заранее. Пожалуйста, дайте мне знать любую другую информацию.Только обновление Hibernate JPA 2.0 и вставка в дочерние таблицы

================ Копирование вставили из комментариев:

Пример кода:

@Entity 
@NamedQuery(name="Custome.findAll", query="SELECT p FROM Customer p") 
public class Customer extends AbstractObject implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    private CustomerPK pk; 

@Temporal(TemporalType.DATE) 
@Column(name="end_dt") 
private Date endDt; 

@Column(name="desc_txt") 
private String descTxt; 

//bi-directional many-to-one association to Dependent 
@OneToMany(mappedBy="customer", cascade=CascadeType.ALL) 
private List<Dependent> dependents = new ArrayList<>(); 
} 

Я хочу обновить descTxt в таблице клиентов и тусклый для вставки зависимой таблицы. Если CustomerPK существует в таблице, то я хочу обновить, если я не хочу пропустить обновление записи в таблице Customer и вставке. В настоящее время я использую session.saveorUpdate (объект). Если существует запись, она обновляет родительскую запись и вставляет в дочернюю таблицу. Но если родительская запись не существует, она вставляет родительскую запись и дочерние записи, которые я не хотел вставлять в родительский запись

+0

Пожалуйста, добавьте код, чтобы показать, что вы пытаетесь сделать. Каковы материнские и дочерние сущности и как они связаны? – greyfairer

+0

Пример кода: @Entity @NamedQuery (имя = "Custome.findAll", запрос = "SELECT р от клиента р") цы} с классом Customer расширяет AbstractObject реализует Serializable { \t частные статический окончательный длинный serialVersionUID = 1L; \t @ EmbeddedId \t частный клиентPK pk; \t @Temporal (TemporalType.DATE) \t @column (имя = "end_dt") \t частная Дата endDt; \t @Column (name = "desc_txt") \t private String descTxt; \t // двунаправленным многие-к-одному ассоциации с зависимой \t @OneToMany (mappedBy = "клиента", каскадной = CascadeType.ALL) \t частных Список иждивенцев = новый ArrayList <>(); –

+0

Я хочу обновить descTxt в таблице клиентов и wan, чтобы вставить таблицу зависимых. Если CustomerPK существует в таблице, то я хочу обновить, если я не хочу пропускать обновление записи в таблице Customer и вставке. В настоящее время я использую session.saveorUpdate (object) Если существует запись, она обновляет родительскую запись и вставляет в дочернюю таблицу, Но если родительская запись не существует, она вставляет родительскую запись и дочерние записи, которые я не хотел insert в родительской записи –

ответ

0

JPA не исправит это. Если вы выберете «saveOrUpdate», он сохранит или обновит. Было бы очень плохо, если бы это было так, как вы ожидаете.

На практике вы никогда не должны создавать новый объект Customer, если вы не собираетесь его сохранять. Вы лучше всего реализуете свою проверку кода вне JPA, например.

Customer customer = entityManager.find(Customer.class, customerPK); 
if(customer != null){ 
    customer.setDescription(...) 
    customer.addDependent(new Dependent (...)) 
    //customer + dependents will be saved at end of transaction or at flush 
} 
else { 
    LOG.info("Ignoring unexisting id", customerPk) 
} 

Примечание:

  • Там нет необходимости вызывать Session.saveOrUpdate если экземпляр клиента был создан Hibernate, и сделать надлежащие транзакции/сеанса Упр. Hibernate будет отслеживать все изменения для постоянных объектов в текущем сеансе и очищать их в конце сеанса.
  • Если вы добавите зависимого к списку зависимостей клиента (лучше всего использовать метод addXxx), он также будет автоматически вставлен с правильным внешним ключом в конце сеанса.
+0

Благодарим за обновление .. он попытается сообщить вам эту опцию. –

+0

Благодарим за обновление .. он попробует и сообщит вам ... Еще одно уточнение, которое я ищу, - customer.addDependent (...) нужно добавить в Customer? или же я могу использовать session.saveorupdate после проверки существования объекта Customer? –

+0

См. Дополнительные примечания – greyfairer

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

  • Нет связанных вопросов^_^