Управлявайте @NamedNativeQuery и схема

Имам много EntityManager, по един на схема, която имам (използвам entity-mappings файл за картографиране на EM със схеми). Работи.

Когато използвам @NamedQuery работи като чар, но когато използвам @NamedNativeQuery схемата не се използва. Трябва да се класирам с него SELECT foo FROM schema.table.

Правилното поведение ли е?

Мисля, че не е възможно да се параметър @NamedNativeQuery за динамично предаване на схема (вярвам, че само колони могат да бъдат динамика, а не таблици или схеми или нещо друго), така че как мога да използвам @NamedNativeQuery с динамична схема, моля?


person Olivier J.    schedule 19.12.2012    source източник


Отговори (2)


Извадки от документацията:

  • NamedNativeQuery : Указва наименувана собствена SQL заявка. Имената на заявките са обхванати от единицата за постоянство.
  • NamedQuery : Указва статична наименувана заявка в езика за заявки на Java Persistence. Имената на заявките са обхванати от единицата за постоянство.

Не е посочено директно, че NamedNativeQuery е статичен, но и двата са с еднакъв обхват и не могат да бъдат променени след това и това е желаното поведение.

Именуваните заявки са предназначени за достъп от множество модули - за цялото приложение, идентифицирани с уникално име, така че те са статични и постоянни. Можете да опитате да създадете низ на заявка динамично и можете да създадете естествена заявка от него, вместо наименувана собствена заявка.

person Nayan Wadekar    schedule 20.12.2012
comment
Знам, че мога да направя това. Така че за вас е невъзможно да използвате наименувана естествена заявка с динамична схема? Тай - person Olivier J.; 20.12.2012
comment
@OlivierJ. Да, не мога да предам таблица/схема и т.н. като параметър към наименувана заявка - person Nayan Wadekar; 20.12.2012
comment
добре, ще генерирам заявката си с низ динамично. Благодаря ти - person Olivier J.; 20.12.2012
comment
Динамичното генериране на низове на заявки може да представлява риск за сигурността, ако стойностите са взети от неуправляеми източници като потребителско въвеждане, така че това трябва да се прави внимателно. Освен това, динамичните заявки не могат да се възползват от функциите за производителност на управление на пула на връзките за повторна употреба на заявка и план за изпълнение в базата данни. Вместо това ще използва логика, за да търси namedQueryX срещу namedQueryY въз основа на всякакви условия, като всяка NamedQuery е обвързана със съответните им единици за устойчивост. - person Darrell Teague; 13.03.2013
comment
@DarrellTeague Да, има риск за сигурността, ако се предоставят входове директно в заявка, вместо да се задават параметри/използват наименувани заявки. За предпочитане е да има отделна единица за устойчивост. - person Nayan Wadekar; 14.03.2013

Поставете пред името на таблицата си "{h-schema}", напр.SELECT foo FROM {h-schema}table

(с любезното съдействие на програмно получаване на името на схемата по подразбиране на хибернация от фабриката за сесии?)

person James    schedule 28.10.2013
comment
Това е хубаво. И името на схемата вече включва точката. XDD - person Agustí Sánchez; 24.08.2016