|
|
|
пара вопросов о hibernate&jsf
|
|||
|---|---|---|---|
|
#18+
база mysql 1. если у меня есть поле класса типа String а я хочу отображать его на text а не на char(255) то аннотация /** *@hibernate.property * sql-type="text" */ не помогает, как быть. если я делаю такую выборку "select a_user.activities from model.TUser as a_user" где activities это связанный список, и затем исследую данную структуру через рефлекцию то вижу не сам класс TUserActivity а подмененный hibernate похоже для реализации lazy load - TUserActivity$$CGI$$какая_то_чушь, как мне для конкретного класса сказать что я хочу загрузить его по настоящему даже не из запроса, в общем случае если у меня есть класс TX и его объект x как проверить что это именно мой объект а не прокси и выполнить его загрузку из базы если это прокси. для организации подчиненных записей есть варианты set, list, array два последних требуют наличие поля index я незнаю как назначить этот идекс если у меня в базе нет ничего физически упорядочивающего записи, криво как-то, т.е. например если я делаю индексом поле id подчиненной таблицы то у меня получаются пробелы в элементах list: a [] = {null, Object1, Object2, null, Object3, null} если я использую фиктивное поле например UserOrder_Fict то возникает вопрос как мне давать эти номера полю, в случае одновременной работы нескольких пользователей, существует ли возможность создать слушателя который бы непосредственно перед сохраннием объекта в базу мог бы выполнить поиск последнего UserOrder_Fict и для нового объекта сделать его UserOrder_Fict + 1 . тут дело в том, что созданные мною объектные иерархии я хочу представлять в jsf dataTable а в качестве источника данных для ее можно давать только массив, список, ResultSet, dataSource так подходящего для меня set - нет. или же я должен для каждого ассоциированного к объекту set делать метод адаптер который будет возвращать копию set но в виде array далее я могу написать запрос вида select count(distinct a_try.activity) from TTry a_try where a_try.completed = true ведь запрос с count distinct специфичен для mysql для того же mssql его нет, значит hiberbnate не дает мне абстрацию от используемой бд и я пишу не переносимый код? как писать запросы вида select a_try.activity from TTry a_try where not exists (select 1 from TUser a_user where a_user.activity.try = a_try) т.е. использующие подзапрос. далее как включить такой уровень журналирования отправки запросов в который будут включены не только запросы вида insert into foo values (?,?,?) но и конкретные значения подставляемые вместо ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 14:24:14 |
|
||
|
пара вопросов о hibernate&jsf
|
|||
|---|---|---|---|
|
#18+
где activities это связанный список, и затем исследую данную структуру через рефлекцию то вижу не сам класс TUserActivity а подмененный hibernate похоже для реализации lazy load - TUserActivity$$CGI$$какая_то_чушь, В общем случае, это нормально - т.е. при работе с Hibernate лучше всегда проверять принадлежность к классу не по его имени, а через instanceof. В вашем же конкретном случае скорее всего что-то использует lazy-loading для организации подчиненных записей есть варианты set, list, array http://hibernate.org/117.html#A5 авторYou need a seperate table column holding the array or List index (the i in foo )! If your relational model doesn't have an index column, use a Set instead. This seems to put people off who assume that List should just be a more convenient way of accessing an unordered collection. Hibernate collections strictly obey the actual semantics attached to the Set, List and Map interfaces. List elements don't just spontaneously rearrange themselves. On the other hand, people who planned to use the List to emulate "bag"-style semantics have a legitimate grievance here. Fortunately you can map a List or Collection with bag semantics. далее я могу написать запрос вида select count(distinct a_try.activity) from TTry a_try where a_try.completed = true ведь запрос с count distinct специфичен для mysql для того же mssql его нет, значит hiberbnate не дает мне абстрацию от используемой бд и я пишу не переносимый код? Это где вы такое можете написать? как писать запросы вида select a_try.activity from TTry a_try where not exists (select 1 from TUser a_user where a_user.activity.try = a_try) т.е. использующие подзапрос. http://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.html#queryhql-subqueries ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2006, 11:08:45 |
|
||
|
пара вопросов о hibernate&jsf
|
|||
|---|---|---|---|
|
#18+
По поводу Lazy-loading: 1) в маппинге для поля, которое должно быть загружено непосредственно из БД без создания прокси необходимо добавить атрибут <ассоциация name="activities" ... outer-join="true"/> 2) в методы DAO, загружающих юбъекты через Criteria (если есть такие), добавить crit.setFetchMode("activities", FetchMode.JOIN) По поводу distinct вроде должно работать через Projection: Criteria crit = getSession().createCriteria(TTry.class); ... crit.setProjection(Projections.distinct(Projections.count("property"))); Подзапросы в Hibernate можно писать напрямую с использованием HQL или создавать динамически с помощью Criteria. Для журналирования в самый раз подходит спринг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2006, 14:18:32 |
|
||
|
пара вопросов о hibernate&jsf
|
|||
|---|---|---|---|
|
#18+
http://www.hibernate.org/315.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 14:12:57 |
|
||
|
пара вопросов о hibernate&jsf
|
|||
|---|---|---|---|
|
#18+
а как уложить вот такой запрос select t1.a, s1.b, s1.c from t1 join (select s1.b, count(s1.b) as c from s1 group by s1.b) on t1. ... = s1 ... как оформить подзапрос? можно ли получить результат подзапроса отдельно, а потом указать его как источник в основном запросе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 21:29:09 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34283515&tid=2146840]: |
0ms |
get settings: |
14ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
68ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 295ms |
| total: | 513ms |

| 0 / 0 |
