2012-06-05 4 views
1

У меня есть родительский список с отображенным дочерним элементом.Спящий режим: обновление отношений OneToMany

Могу ли я узнать, как обновить список ребенка, когда я обновляю родителю

Пример:

Родитель P1 есть ребенок AB C.

я решил удалить B и D добавить

поэтому родительский P1 имеет дочерний ACD в базе данных.

В настоящее время я просто удаляю все дочерние элементы, принадлежащие родительскому P1, и снова заново заполняю chid (A C D) ... Я считаю, что есть более простой способ сделать это.

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

Новый Вопрос:

1) Есть ли способ ленивого обновления/удаления отношений? У меня есть список FetchType.Lazy, когда я обновляю данные, я, возможно, не хочу загружать отношения или обновлять их.

2) Если в списке есть элемент A B C, я удалил элемент C и выполнил dto.save(). Удалить элемент C?

+0

Что именно вы хотите сделать? Удалить дочерние объекты из родителя или удалить их? Это не одно и то же. И покажите нам свой код, чтобы понять, что вы делаете. –

+0

Вы используете список или карту, чтобы связать ребенка с родителем? – Logan

+0

Я использую List, но, к сожалению, я не могу создать код здесь, как это запрещено. Даже вопрос перефразирован. – seesee

ответ

1

Вот отображение обновить ребенка с помощью родителей -

@Entity 
@Table(name = "COMPANY") 
@SequenceGenerator(name="CompanySeq", sequenceName="COMPANYseq", allocationSize=1) 
public class Company implements Serializable { 

    private static final long serialVersionUID = 1L; 

    /* 
    * Customer Company Details 
    */ 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CompanySeq") 
    @Column(name = "COMPANY_ID") 
    private Integer id; 

    @Column(name="COMPANY_NAME") 
    private String name; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    @JoinColumn(name = "COMPANY_ID",nullable=false) 
    @OrderBy(clause = "PRODUCT_NAME") 
    @ForeignKey(name = "fk_company_product")  
    private List<Product> products = new ArrayList<Product>();  

} 



@Entity 
@Table(name = "PRODUCT") 
@SequenceGenerator(name="CompanyProductSeq", sequenceName="COMPANY_PRODUCT", allocationSize=1) 
public class Product implements Serializable{ 

    /** 
    * SerialVersion ID 
    */ 
    private static final long serialVersionUID = 4073418246832063389L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CompanyProductSeq") 
    @Column(name = "PRODUCT_ID") 
    private Integer id; 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name = "COMPANY_ID", updatable = false, insertable = false, nullable=false) 
    private Company companyId; 

     @Column(name = "PRODUCT_NAME") 
    private String name; 

    } 
+0

так как вы действительно обновляете список продуктов в базе данных? – seesee

+0

Я добавлю список продуктов в объект компании и сохраню объект компании в db. он автоматически вставляет весь продукт, который находится в объекте компании, в таблицу продуктов. –

1

1+ для Promod, как он дал очень хороший код, чтобы это понять. Функциональность, которую вы хотите, это все о Hibernate Cascade. С помощью каскада вам просто нужно обновить родительский объект bean, а список его дочерних объектов и Cascade сделает все остальное.

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
@JoinColumn(name = "COMPANY_ID",nullable=false) 
@OrderBy(clause = "PRODUCT_NAME") 
@ForeignKey(name = "fk_company_product")  
private List<Product> products = new ArrayList<Product>();  

В верхнем примере, предоставленном компанией Pramod, Компания хранит все данные о Продуктах как о своих детях. Здесь

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 

cascadeType.All будет выполнять все родительские операции на ребенок тоже то есть вставки/Updation на компании будет выполнять те же на продукте, если вы хотите обновить Продукты компании, Вам просто нужно принести заряженную компанию фасоль с продуктами (FetchType.EAGER), изменять или добавлять новые продукты в bean и сохранятьОбновить компанию. Он также сохранит/обновит компанию и ее продукты.

+0

Мои отношения на FatchType.Lazy. и когда я обновляюсь, я, возможно, не хочу обновлять эти конкретные отношения. Есть ли способ «ленивого» обновления/удаления? – seesee

+0

Я также хочу спросить, может ли сказать, что список имеет 3 раза (A, B, C), я удаляю 1 элемент (A) из списка .. будет ли каскадная функция автоматически удалять – seesee

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