JPA: различия между JQL и SQL - PullRequest
       17

JPA: различия между JQL и SQL

2 голосов
/ 04 декабря 2010

Мне нужен только ответ на очень конкретный вопрос:

Например:

Customer c =(Customer) manager.createQuery("SELECT c FROM Customer c").getResultList().get(0);

Этот код работает из-за использования Java Persistence QueryЯзык.

Customer c = (Customer) manager.createNativeQuery("SELECT * FROM Customer LIMIT 1").getSingleResult();

При использовании аналогичного кода и приведения собственного запроса к Customer не будет работать, будет возбуждено ClassCastException.

Топриводит к вопросу: Можно ли создавать объекты как результаты собственного запроса с использованием SQL?

Ответы [ 2 ]

4 голосов
/ 04 декабря 2010

Я думаю, что вы можете, посмотрите документацию для createNativeQuery (с двумя параметрами; у меня проблемы со ссылкой)

просто передайте нужный класс в вызов createNativeQuery ....

1 голос
/ 04 декабря 2010

Я, очевидно, не видел этого. Кажется, это гораздо более удобный способ, чем изучение JQL.

Но есть еще одна проблема, которая может быть потенциальной ошибкой: в некоторых случаях вам нужно вводить имена полей заглавными буквами.

Я не могу быть уверен, но вы могли бы быть сталкивается с проблемой чувствительности к регистру что довольно распространено при использовании нативные запросы. Поле JPA по умолчанию имена в верхнем регистре, и если вы используя базу данных, которая может вернуть имена полей в нижнем регистре, потому что Java сравнения строк чувствительны к регистру поле может быть не найдено. это приведет к возврату набора результатов ноль, когда он ищет значение для "ID".

Цитируется из Форумы Oracle - первичный ключ определен как нулевой, но это не

Спасибо за быстрый ответ.

...