Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с JPA / 9 сообщений из 9, страница 1 из 1
14.01.2013, 23:44:44
    #38110108
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
Есть объект Avto в него вставлена коллекция других объектов List<Complect> list. Теперь нужно эту коллекцию list вставить в другой объект, причем вставить так, чтобы скопировать всю информацию по объектам Complect с=new Complect(); хранящимся в list, но без уникальных идентификаторов. Просто перебором в цикле как-то не очень хочется. Подскажите как лучше сделать? Спасибо.
...
Рейтинг: 0 / 0
15.01.2013, 08:35:48
    #38110241
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
JulT,
Не хочется, в смысле лень писать?
Тогда в БД insert into )
...
Рейтинг: 0 / 0
15.01.2013, 15:48:28
    #38110895
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
Petro123JulT,
Не хочется, в смысле лень писать?
Тогда в БД insert into )
Расскажу подробнее.
Есть класс
Код: java
1.
Schet


в нем:
Код: java
1.
2.
3.
4.
5.
6.
7.
public Collection<Zakaz> getZakazCollection() {
        return zakazCollection;
    }

    public void setZakazCollection(Collection<Zakaz> zakazCollection) {
        this.zakazCollection = zakazCollection;
    }



Далее, есть другой класс:
Код: java
1.
Avto


в нем так же есть методы:
Код: java
1.
2.
3.
4.
5.
6.
7.
public Collection<Zakaz> getZakazCollection() {
        return zakazCollection;
    }

    public void setZakazCollection(Collection<Zakaz> zakazCollection) {
        this.zakazCollection = zakazCollection;
    }


После того, как я получила коллекцию zakazCollection с класса Schet, мне нужно вставить ее в класс Avto. При этом в класс Avto должны попасть все объекты Zakaz из коллекции zakazCollection, но со своими уникальными идентификаторами.
Если делать в цикле, то получается так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 for(int i=0;i<zakazCollection.size();i++){

               Zakaz newZakaz=new Zakaz();
               Zakaz oldZakaz=zakazCollection.get(i);

               newZakaz.setDateCreate(oldZakaz.getDateCreate());
               newZakaz.setIdTovar(oldZakaz.getIdTovar());
               newZakaz.setCountTovar(oldZakaz.getCountTovar());
               
               
                EntityManagerFactory factory = Persistence.createEntityManagerFactory("FrTreePU2");
                EntityManager manager = factory.createEntityManager();



                   manager.getTransaction().begin();
                      
                         manager.persist(newZakaz);

                                  manager.getTransaction().commit();

                                  manager.close();
               
          }


т.е. пробегаю по коллекции, перебираю все объекты Zakaz из этой коллекции, копирую всю информацию из них в новые объекты Zakaz, кроме id, потому что id объектов класса Avto должны быть уникальными, далее делаю manager.persist(newZakaz); и после этого вновь созданные объекты Zakaz вставляю виде новой коллекции в класс Avto. Есть ли другой более короткий способ? Надеюсь понятно изъяснилась....
...
Рейтинг: 0 / 0
15.01.2013, 15:56:17
    #38110913
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
JulTт.е. пробегаю по коллекции, перебираю все объекты Zakaz из этой коллекции, копирую всю информацию из них в новые объекты Zakaz, кроме id, потому что id объектов класса Avto должны быть уникальными, далее делаю manager.persist(newZakaz); и после этого вновь созданные объекты Zakaz вставляю виде новой коллекции в класс Avto. Есть ли другой более короткий способ? Надеюсь понятно изъяснилась....
В целом верно, но можно упростить.
Во-первых явное копирование по свойствам это нарушение это загодовка для будущих баг.
Если сущности точно не проксированые, можно их же и использовать, просто, вызвать setId(null).
Либо использовать clone() или BeanUtils для копирования свойств.

Сохранение можно попробовать сделать каскадным в маппинге, чтобы не сохранять каждую сущность отдельно.



Код: java
1.
2.
3.
4.
manager.getTransaction().begin();
manager.persist(newZakaz);
manager.getTransaction().commit();
manager.close();


Почему вот это делается в цикле - большая загадка.
...
Рейтинг: 0 / 0
15.01.2013, 16:55:42
    #38111040
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
BlazkowiczJulTт.е. пробегаю по коллекции, перебираю все объекты Zakaz из этой коллекции, копирую всю информацию из них в новые объекты Zakaz, кроме id, потому что id объектов класса Avto должны быть уникальными, далее делаю manager.persist(newZakaz); и после этого вновь созданные объекты Zakaz вставляю виде новой коллекции в класс Avto. Есть ли другой более короткий способ? Надеюсь понятно изъяснилась....
В целом верно, но можно упростить.
Во-первых явное копирование по свойствам это нарушение это загодовка для будущих баг.
Если сущности точно не проксированые, можно их же и использовать, просто, вызвать setId(null).
Либо использовать clone() или BeanUtils для копирования свойств.

Сохранение можно попробовать сделать каскадным в маппинге, чтобы не сохранять каждую сущность отдельно.



Код: java
1.
2.
3.
4.
manager.getTransaction().begin();
manager.persist(newZakaz);
manager.getTransaction().commit();
manager.close();


Почему вот это делается в цикле - большая загадка.
а как же мне без цикла вставить коллекцию
Код: java
1.
Collection<Zakaz> zakazCollection

? на вскидку скажу, что я использую TopLink.
что касается каскадного сохранения, то это делается так?
в классе
Код: java
1.
Schet

:
Код: java
1.
2.
@OneToMany(mappedBy = "idSchet")
    private Collection<Zakaz> zakazCollection;


изменить на:
Код: java
1.
2.
@OneToMany(mappedBy = "idSchet",cascade=CascadeType.PERSIST)
    private Collection<Zakaz> zakazCollection;


я правильно понимаю?
...
Рейтинг: 0 / 0
15.01.2013, 16:58:32
    #38111049
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
JulTа как же мне без цикла вставить коллекцию
Collection<Zakaz> zakazCollection

А почему каждая итерация происходит в своей транзакции?


JulT
Код: java
1.
2.
@OneToMany(mappedBy = "idSchet",cascade=CascadeType.PERSIST)
    private Collection<Zakaz> zakazCollection;


я правильно понимаю?
Да - что-то похожее, но надо почитать про типы каскадов. Конкретно этот может не отработать, если родительсий объект уже presisted.
...
Рейтинг: 0 / 0
15.01.2013, 17:04:09
    #38111060
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
BlazkowiczА почему каждая итерация происходит в своей транзакции?

А разве так сработает?:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
                EntityManagerFactory factory = Persistence.createEntityManagerFactory("FrTreePU2");
                EntityManager manager = factory.createEntityManager();



                   manager.getTransaction().begin();


 for(int i=0;i<zakazCollection.size();i++){

               Zakaz newZakaz=new Zakaz();
               Zakaz oldZakaz=zakazCollection.get(i);

               newZakaz.setDateCreate(oldZakaz.getDateCreate());
               newZakaz.setIdTovar(oldZakaz.getIdTovar());
               newZakaz.setCountTovar(oldZakaz.getCountTovar());
               
               
              manager.persist(newZakaz);

          }

                                  manager.getTransaction().commit();
                                  manager.close();
...
Рейтинг: 0 / 0
15.01.2013, 17:07:09
    #38111070
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
JulTА разве так сработает?
Что заставляет вас в этом сомневатся? Для чего вообще транзакции нужны по-вашему?
...
Рейтинг: 0 / 0
15.01.2013, 17:22:20
    #38111104
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с JPA
BlazkowiczJulTА разве так сработает?
Что заставляет вас в этом сомневатся? Для чего вообще транзакции нужны по-вашему?
я думала, что при таком подходе в базу вставится последняя запись коллекции.... буду пробовать, спасибо большое
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с JPA / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]