|
|
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
Ситуация такая : в запросе из базы гружу к себе в лист все записи определённой таблицы , но так получилось что в таблице сцепленный ключ, а поле, являющееся второй частью ключа меня не интересует и не выводится, и в итоге у меня получается куча дублирующихся записей . В SQL всё просто решается distinctом . Вопрос : Есть ли аналог слова distinct в JDO? или как-то можно сделать через QueryOptionConstants? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 18:27 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
не совсем понятно при чем тут JDO, если Вы работаете с РСУБД напрямую (?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 19:38 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
работаю в eclipse такой вот кусок кода : public List searchAgentByName(String agentName) { QueryOptions qo = new QueryOptions(); qo.addOption(QueryOptionConstants.QUERY_ORDERING, "agentName ascending"); if(agentName.equals("*")) return search("",qo); } если в фильтр пишу : search("distinct agentName,ID",qo); никак не реагирует, то есть возвращает всё и дублицированные записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 20:00 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
В JDO есть некоторые агрегатные функции, но distinct, по-моему нет... Я делаю в JDO так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 20:36 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
проблема не в том что запрос не работает , он работает и делает то что говорят, только я неправильно ему говорю )) мне надо именно distinct как то ему объяснить ) среда агрегатных функций distinct нет так как это не функция вопрос остаётся : Есть ли аналог слова distinct в JDO? спасибо BaZa! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 20:55 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
Мне кажется проблему можно решить через использование группировки. В JDO 2 введены свойства группирования. Это может выглядеть примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. См также здесь . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 12:15 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
Так, смотрим в спецификацию JDO 2: Specifying the Result of a Query (Projections, Aggregates) The application might want to get results from a query that are not instances of the candidate class. The results might be fields of persistent instances, instances of classes other than the candidate class, or aggregates of fields. Код: plaintext The result parameter consists of the optional keyword distinct followed by a commaseparated list of named result expressions. Оно? P.S. А какая у Вас релизация JDO? 2_Alexey А как же быть с ID? (distinct agentName,ID) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 12:30 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
BaZa А как же быть с ID? (distinct agentName,ID) Так и написать setGrouping("agentName, ID"); Собственно все, что написано в этом параметре попадает в дескриптор "GROUP BY ..." при генерации SQL-кода. Здесь же можно вписать и дескриптор "HAVING ...". Я привел ссылку, по которой можно найти примеры для Versant JDO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 14:38 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
группировка qo.addOption(QueryOptionConstants.QUERY_GROUPING, "ID,agentName"); приводит только к тому что дублицированные записи выводятся вместе (если не было ordering) пытаюсь использовать следующее : PersistenceManager pm = null; KodoQuery q = (KodoQuery)pm.newQuery (Agent.class); q.setFilter(""); q.setResult ("distinct ID,agentName"); q.setOrdering("ID ascending"); agent = (List)q.execute (); но что-то не сильно получается, а точнее NullPointerExсeption,наверно из-за pm 2Baza - jdo 1.0.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 15:27 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
как я понял, используется Kodo JDO. Когда я ее смотрел, то мне она не понравилась. Что касается вашей проблемы - необходимо использовать что-то типа VOA JDO, т.е. продукт реализующий JDO 2 (появляется больше возможностей для таких выборок). Как именно, я уже писал ранее. 2 Alexey Нужно не группировать, а убрать дублирование... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 15:40 |
|
||
|
query в JDO
|
|||
|---|---|---|---|
|
#18+
Что-то у вас с используемой реализацией JDO не так. Возможно слишком старая версия. Так, к примеру, привожу выдержку из документации по последней версии 3.3.3 Kodo JDO: Now we have our subtitle data, but we're faced with a new problem: a lot of subtitles start with the same 3 characters, and we really only want to process each string once. Luckily, JDO has a built-in solution. If you begin a result string with the distinct keyword, JDO filters out duplicates. This applies not only to simple projections as in this example, but to complex projections consisting of multiple return values, including persistent object values. Example 11.16. Distinct Projection Query query = pm.newQuery (Magazine.class, "price < 5 " + "&& coverArticle.subtitles.contains (ttl)"); query.setResult ("distinct ttl.substring (0, 3)"); Collection ttls = (Collection) query.execute (); for (Iterator itr = ttls.iterator (); itr.hasNext ();) processSubtitle ((String) itr.next ()); query.close (ttls); Note Some object-relational mapping products require you to alter your query to circumvent duplicate results caused by relational joins. In the simple case, this may only involve using a SELECT DISTINCT equivalent. But in the complex case, such as with aggregate data, you might need to tell the implementation to use subselects and other complicated workarounds to avoid the relational joins problem. This is not the case in JDO. JDO implementations always automatically eliminate duplicates caused by relational joins. You only need to use the distinct keyword in your JDO result string when there are repeated values in the database that you'd like to filter out. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 15:52 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=802&tid=2152270]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 379ms |

| 0 / 0 |
