Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...
http://www.hibernate.org/...mapping-declaration-class
dus in de mapping
<class name="Cat" table="USER.Cat">
Of zeg ik nu iets doms?
Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.
Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...
of (zoek woorden googel = dynamic table nhibernate )
of
http://slagd.com/?p=62
(sorry, gebruike het echt te weinig, ben er vrij zeker van dat het mogelijk is)
Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.
In oracle is iedere user een schema. Per schema heb je dus een nieuwe set tables. Dit is jouw situatie? Want ik begrijp niet echt wat je dan bedoelt met user_default, want dat zou dan inhouden dat je 1 schema hebt met alle tables en in ieder user schema een set synonyms4of9 schreef op donderdag 12 maart 2009 @ 13:29:
Hoi,
Ik ben wat aan het stoeien met Nhibernate. Wij gebruiken echter voor onze applicatie een Oracle DB.
Nu is deze database als volgt opgebouwd.
iedere klant heeft een user, bijv. user_klantx
onder deze user hangen een aantal tabellen.
daarboven is een algemene user gedefinieerd, die noem ik nu even user_default.
onder deze user default hangen alle tabellen van alle user_klantx -en.
Nu heb ik in Nhibernate een session opgevraagd met als user de user_default.
Hoe kan ik nu een query maken, of mijn objecten laten querien op de tabellen van bijv. user_klant1?
Is dit eigenlijk wel mogelijk met Nhibernate?
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Maar geen idee verder wat die class doet
☻/
/▌
/ \ Analyseert | Modelleert | Valideert | Solliciteert | Generaliseert | Procrastineert | Epibreert |
de user_default (heet in het echt anders) heeft rechten op alle user_klantxxx schema's.EfBe schreef op donderdag 12 maart 2009 @ 15:38:
[...]
In oracle is iedere user een schema. Per schema heb je dus een nieuwe set tables. Dit is jouw situatie? Want ik begrijp niet echt wat je dan bedoelt met user_default, want dat zou dan inhouden dat je 1 schema hebt met alle tables en in ieder user schema een set synonyms
Ik connect dus met nhibernate via user_default. Ik wil echter een query uitvoeren op een user_klantxxx table (als in select * from user_klantxxx.table1) en die user_klantxxx wordt @ runtime bepaald.
Ik heb het nu al geprobeerd via de CreateSQLQuery, dat werkt ook wel, ik vroeg me alleen af of het niet beter kan?
Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...
Neem je whisky mee, is het te weinig... *zucht*
Dit klinkt eng. Je gaat security op de database oplossen in een Hibernate laag?
Bovendien maak je voor elke klant een nieuwe database-user aan, met z'n eigen objecten. Je kopieert dus alle database objecten naar een nieuw schema als zich een andere klant aanmeldt?
Is het niet veel verstandiger om gebruik te gaan maken van Oracle VPD (Virtual Private Database). op die manier kun je volstaan met 1 database schema, waar je vervolgens policies op los laat. Die policies kun je op row-level leggen, zodat iedere klant alleen z'n eigen data kan zien. En vervolgens hoef je alleen maar een policy aan te maken voor je user_default, zodat deze alle data in kan zien.
Wat je nu waarschijnlijk moet gaan doen is een view maken met een UNION daarin over alle klant_user tabellen (of hun synonyms).
1
2
3
4
5
6
| select * from klant1.table UNION ALL select * from klant2.table enz.. |
Integratie ontwikkelaars hier melden! http://www.whitehorses.nl
"If everything seems under control, you're just not going fast enough."
in een ideale wereld is er ook geen oorlog.Gabberhead schreef op vrijdag 13 maart 2009 @ 09:10:
*ril*
Dit klinkt eng. Je gaat security op de database oplossen in een Hibernate laag?
Bovendien maak je voor elke klant een nieuwe database-user aan, met z'n eigen objecten. Je kopieert dus alle database objecten naar een nieuw schema als zich een andere klant aanmeldt?
Is het niet veel verstandiger om gebruik te gaan maken van Oracle VPD (Virtual Private Database). op die manier kun je volstaan met 1 database schema, waar je vervolgens policies op los laat. Die policies kun je op row-level leggen, zodat iedere klant alleen z'n eigen data kan zien. En vervolgens hoef je alleen maar een policy aan te maken voor je user_default, zodat deze alle data in kan zien.
Wat je nu waarschijnlijk moet gaan doen is een view maken met een UNION daarin over alle klant_user tabellen (of hun synonyms).
code:
1 2 3 4 5 6 select * from klant1.table UNION ALL select * from klant2.table enz..
Die union wil ik juist niet, want ik wil juist data uit de klantspecifieke tabel.
Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...
Krijg je zoiets:
1
2
3
4
5
6
7
8
| select 'klant1' klant
, t.*
from klant1.table t
union all
select 'klant2' klant
, t.*
from klant2.table t
enz... |
En vervolgens selecteer je uit de view met een extra where clause
1
2
3
| select * from klantview where klant = 'klant1'; |
Dan krijg je alleen het probleem dat je de view moet gaan uitbreiden telkens als je een nieuwe klant krijgt.
Maarja, aangezien je dan toch al bezig bent om een compleet schema in te richten, lijkt me dat in verhouding een klein extra klusje.
Integratie ontwikkelaars hier melden! http://www.whitehorses.nl
"If everything seems under control, you're just not going fast enough."
De situatie is als beschreven, en niet anders.
Ik had overigens al iets over de IInterceptor gelezen, misschien moet ik het op die manier doen.
Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...
Ik heb nog steeds niet de echte oplossing, en sta op het punt om het via de CreateSqlQuery te doen, waarbij ik gewoon "dynamische sql" ga maken. Dit voelt niet goed maar ik kom er anders even niet uit.
De term die ik op internet tegenkom is "Horizontal partitioning" icm (N)Hibernate Shards. Misschien zet deze termoloie mensen op een beter spoor voor mijn probleem?
De Interceptor leek me ok wel iets, alleen kan ik niet vinden hoe ik een string kan inserten die ik in de interceptor kan replacen.
Ik hoop dat iemand mij nog verder kan helpen!
Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...
Anyway, niet van toepassing op jou, 4of9, jij hebt gewoon je applicatie totaal gepartitioneerd, dus wat je zoekt is schema name overwriting in de query. Ik kon 1 2 3 niet iets vinden mbt nhibernate hoe je dat moet oplossen. Een IInterceptor lijkt me niet want die laat je geen query specifieke zaken wijzigen.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...
Tuurlijk4of9 schreef op maandag 16 maart 2009 @ 14:52:
kan LLBLGen dat wel?
Je kunt per call catalog en/of schema names overwriten, zowel op config file niveau als in code. je maakt dus 1 keer een applicatie met een bepaald schema en per klant overwrite je die name dmv of door code de overwrite op te geven of dmv een config file setting als dat mogelijk is/nodig is.
[ Voor 32% gewijzigd door EfBe op 16-03-2009 16:28 ]
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com