Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results / 25 сообщений из 94, страница 1 из 4
11.05.2016, 17:46
    #39233625
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Добрый день !

Есть вопрос :

API базы данных представлено в виде Хранимых процедур , которые возвращают множественные ResultSet
без уникальных ключей

Как в спринге замапить все это на объект через jpa 2.1


Нашел только под топлинк
https://wiki.eclipse.org/EclipseLink/Release/2.5/JPA21#A_more_complex_example_with_multiple_result_sets_using_sql_result_set_mappings

но эта магия работает через бубен с аспектами инструментированием кода и прочей ерундой ...


что нужно :

каким то образом разложить эти ResultSet по обектам - к примеру одного объекта ResultEntity у которого нет id

а поля этого объекта - это Embedded поля ..вроде как то так?
...
Рейтинг: 0 / 0
11.05.2016, 18:15
    #39233656
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Atum1которые возвращают множественные ResultSet
без уникальных ключей
1. Пример приведи. С параметрами что ли? С разными колонками на выходе?
Atum1 без уникальных ключей
При желании через вьюху можно их сделать и работай как обычно.
Шаблон Фасад знаком?
...
Рейтинг: 0 / 0
11.05.2016, 19:25
    #39233711
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Petro123,

Вью мне никто делать не даст.... Пример как по ссылке... Завтра утром скину свой вариант кода... Вопрос очень актуальный.... Знаю как делается обычно через jdbc перебором всех резалтсетов.... И вытаскиванием параметров по их именам.... Но этот шаблонный код... И таких примеров процедур 100500 хочется настроить маппинг...


И да вопрос @entity без @id быть не может!? Как быть если резвлтсет возвращает структуру без уникального ключа.... Средствами jpa ее можно смапить на класс?

Какие аннотации и где указать?
...
Рейтинг: 0 / 0
11.05.2016, 19:34
    #39233719
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
судя по
Код: sql
1.
2.
SELECT E.*, S.* FROM EMPLOYEE E, SALARY S WHERE E.EMP_ID = S.EMP_ID; 
       SELECT A.* FROM ADDRESS A; 


возвращает всё , в том числе и id
...
Рейтинг: 0 / 0
11.05.2016, 19:47
    #39233725
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Это же надо, какой геморой сделали с несколькими результатами в одной хранимке. Поубивав бы.
...
Рейтинг: 0 / 0
11.05.2016, 19:48
    #39233727
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
вадя,
Id не уникален
...
Рейтинг: 0 / 0
11.05.2016, 19:59
    #39233732
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Petro123вадя,
Id не уникален
кто тебе это сказал?
...
Рейтинг: 0 / 0
11.05.2016, 20:04
    #39233738
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Petro123Это же надо, какой геморой сделали с несколькими результатами в одной хранимке. Поубивав бы.
ты просто не умеешь их готовить!
в этом нет ничего страшного. одно обращение к базе и куча данных.
...
Рейтинг: 0 / 0
11.05.2016, 20:49
    #39233765
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
вадяPetro123Это же надо, какой геморой сделали с несколькими результатами в одной хранимке. Поубивав бы.
ты просто не умеешь их готовить!
в этом нет ничего страшного. одно обращение к базе и куча данных.
аргумент из детского сада? Когда куча в программировании это синоним хорошо? ))))LOL
PS
JOIN к куче как делать?
...
Рейтинг: 0 / 0
11.05.2016, 20:54
    #39233768
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
автораргумент из детского сада? Когда куча в программировании это синоним хорошо? ))))LOL
PS
JOIN к куче как делать?
Petro123 не позорься, твоё JOIN к куче как делать? показывает, что ты в базах близок к нулю.
...
Рейтинг: 0 / 0
11.05.2016, 21:17
    #39233776
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
вадя,
мне как то плевать к тому что ты говоришь.
Либо ответ, либо шуруй в ПТ.
...
Рейтинг: 0 / 0
11.05.2016, 21:31
    #39233785
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
что можно ответить ???
какая связь между этим "JOIN к куче как делать" и "множественные ResultSet"

в этом нет ничего страшного. одно обращение к базе и куча данных.
одно обращение к базе и потом просто извлекаешь по очереди результсеты из ответа.
это бывает очень удобно, потому как параметры для следующего rs могут быть взяты из предыдущего.
...
Рейтинг: 0 / 0
11.05.2016, 22:06
    #39233804
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
вадякакая связь между этим "JOIN к куче как делать" и "множественные ResultSet"

тебя не просят анализ.
Тебя просят дать ответ:
- в одной хранимке идут 5 кортежей с данными. Как сделать пересечение LEFT JOIN между первым и вторым кортежем\набором данных?
Для 5-ти разных вьюх это сделать элементарно.
...
Рейтинг: 0 / 0
11.05.2016, 23:52
    #39233839
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Petro123вадякакая связь между этим "JOIN к куче как делать" и "множественные ResultSet"
пропущено...

тебя не просят анализ.
Тебя просят дать ответ:
- в одной хранимке идут 5 кортежей с данными. Как сделать пересечение LEFT JOIN между первым и вторым кортежем\набором данных?
Для 5-ти разных вьюх это сделать элементарно.
термин LEFT JOIN принадлежит СУБД. а то что возвращает хранимка - результаты работы СУБ
и делать LEFT JOIN между результатами это несколько того...., попахивает

вьюха это одно, хранимка другое.
в mysql в хранимке можно вызвать хранимку, но результат такого вызова только отдельные значения, а не таблица, как во вьюхе.
разница между вью и хранимкой внутри и довольно существенна.
...
Рейтинг: 0 / 0
12.05.2016, 00:12
    #39233852
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
«множественный результсет» это термин jdbc , обозначает результат, возвращаемый в кодj java.
термин «результсет» не принадлежит СУБД.
...
Рейтинг: 0 / 0
12.05.2016, 00:13
    #39233854
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
вадяи делать LEFT JOIN между результатами это несколько того...., попахиваетмне тебя жаль.
Удачи!
...
Рейтинг: 0 / 0
12.05.2016, 06:23
    #39233916
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Petro123вадяи делать LEFT JOIN между результатами это несколько того...., попахиваетмне тебя жаль.
Удачи!
а мне тебя , базы это не твоё, jdbc для тебя тёмный лес, жаль....
...
Рейтинг: 0 / 0
12.05.2016, 08:38
    #39233941
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
вадя,
я же не про базы и лес. Я про JOIN))
JOIN для тебя ненужная прокладка. Есть for, например. Я записал.
...
Рейтинг: 0 / 0
12.05.2016, 08:45
    #39233944
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Petro123вадя,
я же не про базы и лес. Я про JOIN))
JOIN для тебя ненужная прокладка. Есть for, например. Я записал.
я такого не говорил!
JOIN это оператор для "соединения" таблиц.
он не может быть прокладкой.
видимо мы запутали друг друга терминами ....
...
Рейтинг: 0 / 0
12.05.2016, 09:00
    #39233954
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
В примере может и есть id - у меня в ResultSet ах их просто нет ... просто наборы данных ...


по старинке все нормально работает ...но вот с jpa 2.1 и мапингом в объекты засада ....


как было :


Код: 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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
 ReportImpl result = new ReportImpl();
 try {

            session = sessionFactory.openSession();
            java.sql.Connection con = session.connection();

            CallableStatement statement = null;

            statement = con.prepareCall("{CALL PR$ONLINE_REPORT(? ,?, ? , ?)}");


            statement.setLong(1, tId);
            statement.setLong(2, lgn);
            statement.setTimestamp(3, new Timestamp(from.getTime()));
            statement.setTimestamp(4, new Timestamp(till.getTime()));

            statement.execute();


           //

            ResultSet rs1 = statement.getResultSet();
            while (rs1.next()) {
                result.setAgentName(rs1.getString(1));
            }
            rs1.close();



            if (statement.getMoreResults()) {
                ArrayList<Tuple3<String, String, String>> reports = new ArrayList<Tuple3<String, String, String>>();

                ResultSet rs2 = statement.getResultSet();
                while (rs2.next()) {
                    reports.add(new Tuple3<String, String, String>(rs2.getString(1), rs2.getString(2), rs2.getString(3)));
                }
                result.setSales(reports);
                rs2.close();
            }


         if (statement.getMoreResults()) {
                ResultSet rs2 = statement.getResultSet();
                while (rs2.next()) {
                    result.setSalesSum(rs2.getString(1));
                }
                rs2.close();
            }

          if (statement.getMoreResults()) {
                ArrayList<Tuple3<String, String, String>> reports = new ArrayList<Tuple3<String, String, String>>();
                ResultSet rs2 = statement.getResultSet();
                while (rs2.next()) {
                    reports.add(new Tuple3<String, String, String>(rs2.getString(1), rs2.getString(2), rs2.getString(3)));
                }
                result.setPayments(reports);
                rs2.close();
            }

            if (statement.getMoreResults()) {
                ResultSet rs2 = statement.getResultSet();
                while (rs2.next()) {
                    result.setPaymentsSum(rs2.getString(1));
                }

                rs2.close();
            }

            if (statement.getMoreResults()) {
                ResultSet rs2 = statement.getResultSet();
                while (rs2.next()) {
                    result.setTotalSum(rs2.getString(1));
                }

                rs2.close();
            }


            statement.close();




что хочу - как в примере - через автомапинг - ибо таких хранимок очень много .... и писать типовой код - зло.
...
Рейтинг: 0 / 0
12.05.2016, 09:15
    #39233962
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
авторВ примере может и есть id - у меня в ResultSet ах их просто нет ... просто наборы данных .
ResultSet - это просто набор данных.
как ты определяешь, что не id?
приведи пример реальной хранимки для которой нет id.
...
Рейтинг: 0 / 0
12.05.2016, 09:41
    #39233978
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
В чистом jpa, скорее всего, не получится.
Но маппинг без ключей существует, например, в хибере:
Код: java
1.
2.
3.
Query query = session.getNamedQuery("credit.processes")
		.setResultTransformer(Transformers.aliasToBean(CreditProcess.class));
List<CreditProcess> processes = query.list();


где CreditProcess - обычный класс (не требует никаких аннотаций и описаний в xml).

Можно, наверно, подобным образом мапить и в EclipseLink
...
Рейтинг: 0 / 0
12.05.2016, 09:41
    #39233981
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
Atum1,
Вроде не раз писали, что ОРМ в отчетах не эффективен.
Напиши как ты видишь заполнение объекта reports через ORM.
...
Рейтинг: 0 / 0
12.05.2016, 09:45
    #39233986
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
ivanra,
Именованый запрос работает с такой хранимкой? Параметры и мульти?
...
Рейтинг: 0 / 0
12.05.2016, 09:51
    #39233991
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results
вадяавторВ примере может и есть id - у меня в ResultSet ах их просто нет ... просто наборы данных .
ResultSet - это просто набор данных.
как ты определяешь, что не id?
приведи пример реальной хранимки для которой нет id.

1) нет вообще доступа к таблицам ... нет и

Код: java
1.
2.
@Entity(name="DepartmentEntity")
@Table (name="department")



Хотя в идеале хотелось бы получить некую метаинформацию из таблиц/хранимок и написать Свой ORM :)

а как хочется
Код: 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.
@Entity //  нужно убрать , т.к. нет никакого entity  но без него не регистритуется хранимка !!!!!
@NamedStoredProcedureQuery(name = "GET_MPARAMETERS", procedureName = "PR_GET_MPARAMETERS",
        parameters = {
                @StoredProcedureParameter(mode = ParameterMode.IN, name = "a_id", type = Integer.class),
                @StoredProcedureParameter(mode = ParameterMode.IN, name = "a_dr", type = Integer.class) },
        resultSetMappings={"MPropertiesResultSetMapping", "CatResultSetMapping", "SignResultSetMapping"}
)
public class ResultEntity implements Serializable{

    private static final long serialVersionUID = 1L;


    @Embedded// думаю это ненужно 
    private MProperties mProperties;

    @Embedded //// думаю это ненужно 
    private  Cat сat;

    @EmbeddedId // тут нужен  @Embedded
   private  Sign sign;

    public MProperties getMProperties() {
        return mProperties;
    }

    public void setMProperties(MProperties mProperties) {
        this.mProperties = mProperties;
    }

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public Vsign getSign() {
        return sign;
    }

    public void setSign(Sign sign) {
        this.sign = sign;
    }
}




Код: 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.
@Embeddable // думаю это ненужно 
@SqlResultSetMappings({
        @SqlResultSetMapping(
                name = "MPropertiesResultSetMapping",
                entities = {
                        @EntityResult(entityClass = MProperties.class)
                }
        )

})
public class MProperties implements Serializable {

    private static final long serialVersionUID = 1L;


    private Long a_id_ans;

    private Integer a_column;

    String a_draw;



    public Integer getA_column() {
        return a_column;
    }

    public Long getA_id_ans() {
        return a_id_ans;
    }

    public String getA_draw() {
        return a_draw;
    }
}

 
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring JPA 2.1 NamedStoredProcedureQuery more complex example with multiple results / 25 сообщений из 94, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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