JPA/Hibernate配置Oracle 默認(rèn)schema,拋棄synonym

在某些大企業(yè)里,Oracle的account角色是分得很清楚的。

  • Schema account: 用于管理整個(gè)schema
  • Application account: 用來給應(yīng)用程序使用
  • Read only account: 只讀用戶,用來做交互式查詢
    ...

雖然分配數(shù)據(jù)庫的時(shí)候,是以Schema Account來做Schema的,但是每個(gè)Account,其實(shí)也有它自己的Schema 空間。那么問題來了,應(yīng)用程序需要用到的表,在schema account的schema里面,那么當(dāng)程序用application account去連接的時(shí)候,就會發(fā)現(xiàn)找不到Table,因?yàn)锳pplication account的默認(rèn)Schema是它自己。于是,很多人的慣例,是創(chuàng)建同義詞synonym,那么訪問的時(shí)候就沒有障礙了。可是其實(shí)Synonym的創(chuàng)建其實(shí)是挺困難的。為什么呢?因?yàn)镾chema Account沒權(quán)限給Application Account創(chuàng)建Synonym,Application Account一般沒權(quán)限給自己創(chuàng)建,于是乎,又要去麻煩DBA然后被各種鄙視…

言歸正傳,Java,尤其是Hibernate,JPA這些,是支持設(shè)置Schema的,也許在多數(shù)據(jù)源的情況下,可能遇到一些問題,但是現(xiàn)在是微服務(wù)年代,誰特么還配置雙數(shù)據(jù)源?趕緊重構(gòu)??!

以Spring boot為例,這樣配就對了

spring.jpa.properties.hibernate.default_schema=my_schema

如果用到NativeQuery, 可以這樣搞

@Query("select * from {h-schema}user", nativeQuery=true)

這個(gè) {h-schema}占位符,是Hibernate的語法。

有興趣的看一下英文資料:
Working with a default schema is so much easier when the schema name is defined only one, by the hibernate.default_schema configuration property. While this works just fine for JPQL queries, for native queries you need to provide the {h-schema} placeholder.
Hibernate also defines h-domain and h-catalog placeholders as well. The {h-catalog} resolve the global catalog defined by the hibernate.default_catalog configuration property. The {h-domain} resolves both the global catalog and schema, injecting them like this: catalog.schema.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,929評論 0 13
  • =========================================================...
    _燈火闌珊處閱讀 2,544評論 0 3
  • 云流著墨成群的奔向海里 倏忽的白光在遠(yuǎn)處隱沒 狂風(fēng)亂著又散了光陰 黛色洶涌地沉浸這片天地 偶爾的雷鳴閃過足跡 背著...
    阿甯Linn閱讀 386評論 1 3
  • 我的貓咪離我而去; 我的朋友離我而去; 我的女孩離我而去; 我的童真離我而去; 我的靈魂離我而去; 我的生命離我而...
    玉林林林林閱讀 485評論 1 4
  • “原生家庭是指父母的家庭,兒子或女兒并沒有組成新的家庭,這樣的家庭泛指原生家庭。而新生家庭就是夫妻自己組建的家庭,...
    此座已_站閱讀 295評論 1 0

友情鏈接更多精彩內(nèi)容