Можем ли мы написать запрос описания таблицы в JPQL? - PullRequest
0 голосов
/ 28 января 2011

Я беру «Ключевое слово» и имя таблицы от пользователя. Теперь я хочу найти все столбцы таблицы с типом данных varchar (String). Затем я создам запрос, который сравнит ключевое слово с этим столбцом, и соответствующие строки будут возвращены как набор результатов.

Я пробовал desc table_name запрос, но он не работал.

Можем ли мы написать запрос таблицы описаний в JPQL? Если нет, то есть ли другой способ решить вышеуказанную ситуацию? Пожалуйста, помогите и спасибо заранее.

Ответы [ 3 ]

4 голосов
/ 28 января 2011

Обходной путь не требуется, поскольку это не является недостатком технологии. Нужно менять не JPQL, а ваш выбор технологии. В JPQL вы не можете даже выбрать данные из таблицы. Вы выбираете из классов, и они могут быть сопоставлены с несколькими таблицами одновременно, что приводит к объединению SQL для самых простых запросов. Описывать такое соединение было бы бессмысленно. И даже если бы вы могли описать таблицу, вы используете не имена столбцов в JPQL, а свойства объектов. Описывать таблицы в JPQL нет смысла.

JPQL предназначен для запросов объектов, а не таблиц. Кроме того, он предназначен для статической работы (где классы отображаются раз и навсегда), а не для динамических вещей, таких как отображение таблиц на объекты на лету или проверка базы данных в реальном времени (для этого предназначен AR ror). Динамическое обнаружение свойств не является частью этого.

В зависимости от того, чего вы действительно хотите достичь (мы знаем только то, что вы пытаетесь сделать, это отличается), у вас есть два основных варианта:

  • , если вы пытаетесь написать часть программного обеспечения динамическим способом, чтобы он приспосабливался к изменениям в схеме - отбрасывайте JPQL (или любой другой ORM). Java-классы должны быть статичными, вы не можете отобразить их в динамические таблицы (или вырастить новые атрибуты). Используйте наборы строк, они отлично работают, и они позволят вам использовать SQL;

  • если вы создаете умную библиотеку, которая может совместно использоваться многими проектами и поэтому должны работать со многими различными статическими сопоставлениями, используйте API отражения, чтобы найти свойства объектов, для которых вы запрашиваете. Имена столбцов в таблице вам все равно не помогут, поскольку в запросах JPQL вы должны использовать имена, определенные в отображениях.

1 голос
/ 30 января 2011

Сопоставьте таблицы словаря базы данных и прочитайте необходимые данные из них.Для базы данных Oracle вам нужно будет выбрать одну из следующих трех таблиц: user_tab_comments, user_tab_cols, user_col_comments;для достижения полной функциональности описания оператора.

В сообществе ведутся разговоры о динамическом определении постоянного модуля в будущих версиях JPA: http://www.oracle.com/goto/newsletters/javadev/0111/blogs_sun_devoxx.html?msgid=3-3156674507

0 голосов
/ 28 января 2011

По мне, мы не можем использовать запрос описания в jpql.

...