Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA Controller / 22 сообщений из 22, страница 1 из 1
27.11.2017, 13:10
    #39559949
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
По ссылке описание проблемы:
столкнулся с похожей ситуацией, хочу разобраться что не так.
Есть связь один ко многим (2 тестовые таблицы), создаем entity добавляем к нему список других entity после чего через контроллер пытаюсь создать запись в БД(postgres), вылетает эксепшн. (Netbeans, eclipselink)

Как я понимаю, почему-то в связанной(это которая to many) сущности нет id...
...
Рейтинг: 0 / 0
27.11.2017, 13:13
    #39559950
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
с такой постановкой вопроса вам на форум экстрасенсов надо
...
Рейтинг: 0 / 0
27.11.2017, 13:14
    #39559952
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
...
Рейтинг: 0 / 0
27.11.2017, 13:27
    #39559960
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
...
Рейтинг: 0 / 0
27.11.2017, 13:28
    #39559962
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Нашел пример где вопрос задают один в один.
...
Рейтинг: 0 / 0
27.11.2017, 13:30
    #39559963
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 try {
            em = getEntityManager();
            em.getTransaction().begin();
            Collection<BancosCuentas> attachedBancosCuentasCollection = new ArrayList<BancosCuentas>();
            for (BancosCuentas bancosCuentasCollectionBancosCuentasToAttach : bancos.getBancosCuentasCollection()) {
                bancosCuentasCollectionBancosCuentasToAttach = em.getReference(bancosCuentasCollectionBancosCuentasToAttach.getClass(), bancosCuentasCollectionBancosCuentasToAttach.getIdbancosCuentas());
                attachedBancosCuentasCollection.add(bancosCuentasCollectionBancosCuentasToAttach);
            }
            bancos.setBancosCuentasCollection(attachedBancosCuentasCollection);
            em.persist(bancos);
            for (BancosCuentas bancosCuentasCollectionBancosCuentas : bancos.getBancosCuentasCollection()) {
                Bancos oldBancosIdbancos1OfBancosCuentasCollectionBancosCuentas = bancosCuentasCollectionBancosCuentas.getBancosIdbancos1();
                bancosCuentasCollectionBancosCuentas.setBancosIdbancos1(bancos);
                bancosCuentasCollectionBancosCuentas = em.merge(bancosCuentasCollectionBancosCuentas);
                if (oldBancosIdbancos1OfBancosCuentasCollectionBancosCuentas != null) {
                    oldBancosIdbancos1OfBancosCuentasCollectionBancosCuentas.getBancosCuentasCollection().remove(bancosCuentasCollectionBancosCuentas);
                    oldBancosIdbancos1OfBancosCuentasCollectionBancosCuentas = em.merge(oldBancosIdbancos1OfBancosCuentasCollectionBancosCuentas);
                }
            }
            em.getTransaction().commit(); 
...
Рейтинг: 0 / 0
27.11.2017, 13:33
    #39559966
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Blazkowicz CascadeType.html#PERSIST ?
Пробовал разные варианты, результата не было.
...
Рейтинг: 0 / 0
27.11.2017, 13:47
    #39559972
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
olegeos,

Вызов метода getReference() и "через контроллер пытаюсь создать запись в БД" это даже близко не одно и тоже.
...
Рейтинг: 0 / 0
27.11.2017, 13:51
    #39559977
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Blazkowiczolegeos,

Вызов метода getReference() и "через контроллер пытаюсь создать запись в БД" это даже близко не одно и тоже.
Это понятно, в этой строке происходит эксепшн т.к. id второй таблицы (которая в списке) возвращает null и этот момент непонятен.
...
Рейтинг: 0 / 0
27.11.2017, 13:52
    #39559979
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Через контроллер имелось ввиду вызывая метод create.
...
Рейтинг: 0 / 0
27.11.2017, 13:59
    #39559985
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
olegeosЧерез контроллер имелось ввиду вызывая метод create.
Ааа, так это ещё какой-то автогенерированный говнокод? Жуть какая. И чье это изобретение? Eclipse, NetBeans или JEE?
...
Рейтинг: 0 / 0
27.11.2017, 14:12
    #39559993
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
NB
...
Рейтинг: 0 / 0
27.11.2017, 14:24
    #39560003
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 Bancos banco = new Bancos();
       banco.setDireccion("Avda. Santa Teresa 1234");
       banco.setEjecutivoDeCuenta("Carolina Molas");
       banco.setEmail("[hidden email]");
       banco.setNombre("Banco Vision XX");
       banco.setTelefono("");
       
       BancosCuentas bc = new BancosCuentas();
       bc.setCuentaNumero("14-9849392-08");
       bc.setTipoDeCuenta("CTA CTE");
       bc.setBancosIdbancos1(banco);
       
       List<BancosCuentas> bcList = new ArrayList<BancosCuentas>();
       bcList.add(bc);
       banco.setBancosCuentasCollection(bcList);
       
       EntityManagerFactory emf = Persistence.createEntityManagerFactory("w3_softPU");
       
       new BancosJpaController(emf).create(banco);



Да если из метода контроллера убрать все кроме em.getTransaction().begin(), persist(Bancos), commit
то в базу запишется но без ссылок на основную таблицу. (BancosCuentas в поле для BancosID будет NULL)
...
Рейтинг: 0 / 0
27.11.2017, 14:24
    #39560004
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
olegeosNB
А для чего оно вообще? Я вообще не представляю нафига ещё нужен какой-то кривой слой, который не понятно что делает с сущностями. Пользую Spring Data и не парюсь.
...
Рейтинг: 0 / 0
27.11.2017, 14:25
    #39560006
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
olegeos,

Уберите нафиг getReference(). Пропишите CascadeType в маппинге. Соберите своё дерево сущностей и вызовите em.persist()
...
Рейтинг: 0 / 0
27.11.2017, 14:36
    #39560012
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
olegeosто в базу запишется но без ссылок на основную таблицу. (BancosCuentas в поле для BancosID будет NULL)
Если убрать вашу автогенерацию, то JPA работает?
...
Рейтинг: 0 / 0
27.11.2017, 14:48
    #39560019
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Petro123,
работает, но ключи в зависимой таблице не проставляются
(в первой таблице есть id, во второй тоже есть id плюс id_первой таблицы и внешний ключ на нее) Создается один объект т1 и два объекта т2 которые кладутся в лист и добавляются к т1 после чего происходит persist итог: в БД т1 - одна запись, т2 - две записи, однако поле с ссылкой на id - т1 = NULL
...
Рейтинг: 0 / 0
27.11.2017, 14:58
    #39560029
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
olegeosработает, но
Выше сказали, давай пример ПРОСТО JPA.
...
Рейтинг: 0 / 0
27.11.2017, 15:00
    #39560031
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
olegeos,
Hello world JPA ОДИН КО МНОГИМ.
Понакуролесил тут с генерацией.
...
Рейтинг: 0 / 0
27.11.2017, 15:08
    #39560035
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Petro123,
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");

        EntityManager em = emf.createEntityManager();

//          OtchetinfoJpaController cont = new OtchetinfoJpaController();

        Otchetinfo inf = new Otchetinfo();

        inf.setCodeotchet(460);

        inf.setRazdel(1);

 

        List<Otchetdata> list = new ArrayList<>();

 

        Otchetdata dat = new Otchetdata();

 

        dat.setField1(123);

        dat.setRowcount(12);

        dat.setIdotchetinfo(inf);

        Otchetdata dat1 = new Otchetdata();

 

        dat1.setField1(1234);

        dat1.setRowcount(132);

        dat1.setIdotchetinfo(inf);

        list.add(dat);

        list.add(dat1);

 

        inf.setOtchetdataList(list);

 

        em.getTransaction().begin();

        em.persist(inf);

        em.getTransaction().commit();


Код: 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.
25.
26.
27.
28.
29.
30.
31.
@Entity

@Table(name = "otchetdata", schema = "otchet")

@NamedQueries({

    @NamedQuery(name = "Otchetdata.findAll", query = "SELECT o FROM Otchetdata o")})

public class Otchetdata implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Basic(optional = false)

    @Column(name = "id",nullable = false)

    private Integer id;

    @Column(name = "rowcount")

    private Integer rowcount;

    @JoinColumn(name = "idotchetinfo", referencedColumnName = "id",nullable = false)

    @ManyToOne(cascade = CascadeType.ALL)

    private Otchetinfo idotchetinfo;


Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
@Entity

@Table(name = "otchetinfo", schema = "otchet")

@NamedQueries({

    @NamedQuery(name = "Otchetinfo.findAll", query = "SELECT o FROM Otchetinfo o")})

public class Otchetinfo implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Basic(optional = false)

    @Column(name = "id")

    private Integer id;

    @Column(name = "nameotchet")

    private String nameotchet;

    @Column(name = "codeotchet")

    private Integer codeotchet;

    @Column(name = "periodotcheta")

    private Integer periodotcheta;

    @Column(name = "razdel")

    private Integer razdel;

    @Column(name = "rowcount")

    private Integer rowcount;

    @Column(name = "fieldcount")

    private Integer fieldcount;

    @OneToMany(mappedBy = "idotchetinfo",cascade = CascadeType.ALL,targetEntity = Otchetdata.class)

    private List<Otchetdata> otchetdataList;



В таком виде сработало.
...
Рейтинг: 0 / 0
27.11.2017, 15:12
    #39560039
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Осталось только узнать про декларативные транзакции.
...
Рейтинг: 0 / 0
27.11.2017, 15:20
    #39560046
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA Controller
Всем спс за помощь.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA Controller / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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