powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вытащить через пул объект, с привязанным объектом
6 сообщений из 6, страница 1 из 1
Вытащить через пул объект, с привязанным объектом
    #39174361
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знал что в названии темы написать, сейчас попробую описать ситуацию, думаю она не так редка.
Есть проект, в нем есть классы сущностей, которые используются в основном для мапинга и прочих вещей Хибернейтом.
Я сделал тестовую класс сущность, в нее добавил привязку к другой сущности DinamicProduct.
То есть всего их две TestData и DinamicProduct

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Entity
public class TestData implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String someName;
    @ManyToOne
    private DinamicProduct dinamicProduct;
    private Integer dinamicProductId;
.................




Далее я добавил класс, назовем его провайдером, который выдаст нам одним из методов getTestDatas() массив тестовых объектов.
Загвоздка в том, что надо бы, чтобы при выборке объектов, у него было возможно получить(а в дальнейшем и обновить) данные в поле dinamicProduct.
Кстати, данные в строке private final String columnsListForSQL = "id, someName, dinamicProduct, dinamicProductId";
не совсем верны, выделеное красным должно быть dinamicProduct_id, так как в таблице это поле именно так генерируется гибернейтом.

В методе rsToTestData() видим строчку td.setDinamicProduct( ????????????? );
Вот что в нее прописать? или ничего? Как вообще через JDBC такие штуки вытаскивать и/или обновлять?

Код: 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.
public class TestDataProvider implements Serializable {

    private static final long serialVersionUID = 1L;
    private List<TestData> testDatas = new ArrayList<TestData>();
    private MyDataSource pool = MyDataSource.INSTANCE;
    private final String columnsListForSQL = "id, someName, dinamicProduct, dinamicProductId";

    public TestData[] getTestDatas() throws SQLException {
        String sql = "select " + columnsListForSQL + " from TestData ";
        testDatas.clear();
        try (Connection c = pool.getDataSource().getConnection()) {
            try (PreparedStatement ps = c.prepareStatement(sql)) {
                try (ResultSet rs = ps.executeQuery()) {
                    while (rs.next()) {
                        testDatas.add(rsToTestData(rs));
                    }
                }
            }
        }
        return testDatas.toArray(new TestData[0]);
    }

    private TestData rsToTestData(ResultSet rs) throws SQLException {
        TestData td = new TestData();
        td.setId(rs.getInt("id"));
        td.setSomeName(rs.getString("someName"));
        td.setDinamicProduct( ????????????? );
        td.setDinamicProductId(rs.getInt("dinamicProductId"));
        return td;
    }
...
Рейтинг: 0 / 0
Вытащить через пул объект, с привязанным объектом
    #39174378
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
правильнее будет все же DynamicProduct

А если по существу, то что за адский микс? Зачем вам какой-то левый провайдер, если можно вытянуть полностью сконструированные сущности со всеми взаимосвязями через EntityManager?
...
Рейтинг: 0 / 0
Вытащить через пул объект, с привязанным объектом
    #39174392
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicЕсть проект, в нем есть классы сущностей, которые используются в основном для мапинга и прочих вещей Хибернейтом.
...
Как вообще через JDBC такие штуки вытаскивать и/или обновлять?

Так ЖДБЦ или Хибернейтом?
...
Рейтинг: 0 / 0
Вытащить через пул объект, с привязанным объектом
    #39174393
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никNixic,
правильнее будет все же DynamicProduct

А если по существу, то что за адский микс? Зачем вам какой-то левый провайдер, если можно вытянуть полностью сконструированные сущности со всеми взаимосвязями через EntityManager?
Из-за ощущений, что так будет быстрее работать :)
Пробовал когда-то использовать Lazy, потому что есть сущности с множественными связями, и они тащат за собой кучу всего, когда надо получить просто список из таблицы. Но в итоге, иногда нужно получить-таки один привязанный объект.
В общем вот такой вот микс.
А еще есть одна база и два интерфейса, один на вебе, другой на свинге. На свинге тащится все через пул, поэтому добавлены DynamicProductId.
В общем бардак страшнейший)
...
Рейтинг: 0 / 0
Вытащить через пул объект, с привязанным объектом
    #39174398
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixicзабыл никNixic,
правильнее будет все же DynamicProduct

А если по существу, то что за адский микс? Зачем вам какой-то левый провайдер, если можно вытянуть полностью сконструированные сущности со всеми взаимосвязями через EntityManager?
Из-за ощущений, что так будет быстрее работать :)
Пробовал когда-то использовать Lazy, потому что есть сущности с множественными связями, и они тащат за собой кучу всего, когда надо получить просто список из таблицы. Но в итоге, иногда нужно получить-таки один привязанный объект.
В общем вот такой вот микс.
А еще есть одна база и два интерфейса, один на вебе, другой на свинге. На свинге тащится все через пул, поэтому добавлены DynamicProductId.
В общем бардак страшнейший)

Ну тут просто ваша лень) не будет оно тормозить. По-хорошему конечно надо все перепроектировать, но я понимаю что это может быть затратно, как хот фикс, вам надо просто открыть второй PreparedStatement, сделать select from dinamicProduct where dinamicId = : и заполнить объект, а потом его уже засеттить в TestData
...
Рейтинг: 0 / 0
Вытащить через пул объект, с привязанным объектом
    #39174441
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никНу тут просто ваша лень) не будет оно тормозить. По-хорошему конечно надо все перепроектировать, но я понимаю что это может быть затратно, как хот фикс, вам надо просто открыть второй PreparedStatement, сделать select from dinamicProduct where dinamicId = : и заполнить объект, а потом его уже засеттить в TestData
Так и делаю в некоторых местах :)
Ну в общем, не буду придумывать ничего, надо просто с гибернейтом разобраться по нормальному.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вытащить через пул объект, с привязанным объектом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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