Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вытащить через пул объект, с привязанным объектом / 6 сообщений из 6, страница 1 из 1
18.02.2016, 15:30
    #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
18.02.2016, 15:36
    #39174378
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытащить через пул объект, с привязанным объектом
Nixic,
правильнее будет все же DynamicProduct

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

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

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

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

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


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