|
|
|
Hibernate - возможно ли сделать join на основе вычисляемого значения (не колонки таблицы)?
|
|||
|---|---|---|---|
|
#18+
Может кто знает где можно поглядеть, или сталкивался кто. Вопрос в следующем (на примере): 1) Есть 2 таблицы - User и SuperUser. Для User и для SuperUser *классов* (не таблиц) есть Transient проперти, которые собственно и определяют тип юзера. В таблицах тип юзера не заведен - тип определяется самой таблицой. Так сложилось исторически. 2) Есть таблица Log, которая логирует заходы юзеров на сайт. В таблице Log поля: "id, userId, userType, date" Где userId - ссылка на User или SuperUser, точно на какую таблицу идет ссылка определяется userType-ом. Тоже сложилось исторически. То есть тут как бы смешение - foreign key это {userId, userType}, но userType - это *не* запись в primary таблице. У меня есть на мой взгляд естественное желание иметь в обьекте User (да и SuperUser) поле Log, которое ссылалось бы на соотв. запись в тиблице Log. Остался один небольшой вопрос - я не знаю как это делать :) Как мне сослаться на foreign key, если одно из полей этого ключа вычисляемое? (в моем случае вообще константа - тип юзера) Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2006, 15:59 |
|
||
|
Hibernate - возможно ли сделать join на основе вычисляемого значения (не колонки таблицы)?
|
|||
|---|---|---|---|
|
#18+
С такой проблемой сталкивались. Возможно. 1) Для решения конкретно той задачи, о которой вы говорите, можно воспользоваться фильтром. У Ваших User-ов можно сделать такие коллекции логов: У SuperUser-а: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. У User-а Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Фильтры естественно нужно активировать при создании сессии (session.enableFilter). Ну и не забыть в классах User-ов создать мембер logs типа List с публичными геттером и сеттером. 2) Более того, если вы захотите из Log-объекта знать к какому именно пользователю он относится (а это Вам обязательно понадобится), то Вам поможет такой тип маппинга как any! Делаете в маппинге log-а: Код: plaintext 1. 2. 3. 4. 5. 6. В классе log-а создаете свойство user типа Object. Если сразу не заработает, то не отчаивайтесь. Будем разбираться. У нас разработана система, в которой ведется сквозное логгирование операций над объектами (всеми) в обной таблице (классе). Так что система, построенная на фильтрах и any-ассоциациях вполне работоспособна. Есть в ней (в системе) и классы, которые организованы как у вас: типизация на базе разнесения подклассов в различные таблицы. Но это по-моему не сильно влияет именно на эту задачу. Пробуйте. Если не получится - пишите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 08:13 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33800234&tid=2148908]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 514ms |

| 0 / 0 |
