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

Как я понимаю, почему-то в связанной(это которая to many) сущности нет id...
...
Рейтинг: 0 / 0
JPA Controller
    #39559950
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с такой постановкой вопроса вам на форум экстрасенсов надо
...
Рейтинг: 0 / 0
JPA Controller
    #39559952
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JPA Controller
    #39559960
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JPA Controller
    #39559962
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел пример где вопрос задают один в один.
...
Рейтинг: 0 / 0
JPA Controller
    #39559963
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
JPA Controller
    #39559966
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz CascadeType.html#PERSIST ?
Пробовал разные варианты, результата не было.
...
Рейтинг: 0 / 0
JPA Controller
    #39559972
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegeos,

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

Вызов метода getReference() и "через контроллер пытаюсь создать запись в БД" это даже близко не одно и тоже.
Это понятно, в этой строке происходит эксепшн т.к. id второй таблицы (которая в списке) возвращает null и этот момент непонятен.
...
Рейтинг: 0 / 0
JPA Controller
    #39559979
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через контроллер имелось ввиду вызывая метод create.
...
Рейтинг: 0 / 0
JPA Controller
    #39559985
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegeosЧерез контроллер имелось ввиду вызывая метод create.
Ааа, так это ещё какой-то автогенерированный говнокод? Жуть какая. И чье это изобретение? Eclipse, NetBeans или JEE?
...
Рейтинг: 0 / 0
JPA Controller
    #39559993
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NB
...
Рейтинг: 0 / 0
JPA Controller
    #39560003
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
JPA Controller
    #39560004
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegeosNB
А для чего оно вообще? Я вообще не представляю нафига ещё нужен какой-то кривой слой, который не понятно что делает с сущностями. Пользую Spring Data и не парюсь.
...
Рейтинг: 0 / 0
JPA Controller
    #39560006
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegeos,

Уберите нафиг getReference(). Пропишите CascadeType в маппинге. Соберите своё дерево сущностей и вызовите em.persist()
...
Рейтинг: 0 / 0
JPA Controller
    #39560012
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegeosто в базу запишется но без ссылок на основную таблицу. (BancosCuentas в поле для BancosID будет NULL)
Если убрать вашу автогенерацию, то JPA работает?
...
Рейтинг: 0 / 0
JPA Controller
    #39560019
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
работает, но ключи в зависимой таблице не проставляются
(в первой таблице есть id, во второй тоже есть id плюс id_первой таблицы и внешний ключ на нее) Создается один объект т1 и два объекта т2 которые кладутся в лист и добавляются к т1 после чего происходит persist итог: в БД т1 - одна запись, т2 - две записи, однако поле с ссылкой на id - т1 = NULL
...
Рейтинг: 0 / 0
JPA Controller
    #39560029
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegeosработает, но
Выше сказали, давай пример ПРОСТО JPA.
...
Рейтинг: 0 / 0
JPA Controller
    #39560031
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegeos,
Hello world JPA ОДИН КО МНОГИМ.
Понакуролесил тут с генерацией.
...
Рейтинг: 0 / 0
JPA Controller
    #39560035
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JPA Controller
    #39560039
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осталось только узнать про декларативные транзакции.
...
Рейтинг: 0 / 0
JPA Controller
    #39560046
olegeos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спс за помощь.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA Controller
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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