Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: Nested Objects & Named Query / 10 сообщений из 10, страница 1 из 1
18.08.2005, 17:02
    #33223687
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
Привет всем и БОЛЬШОЙ ПРИВЕТ крутым хиберам.
Вот собсвтвенно такой вопросец. Можно ли объект, содержащий в себе другие объесты (описаные через component в hbm.xml) достать через Named Query?

В доках такого не нашел, а пляски с бубном пока положительного результату не дали.

Доступ к изменению схемы базы минимальный. Создание всяких там View не предусмотрено. А объект надо родить из данных с кучи таблиц (плюс условия).

А вот в хибере можно развлекаться как угодно - то есть описывать через component необязательно, можно как угодно. Хибер третий.

Спасибо.
...
Рейтинг: 0 / 0
18.08.2005, 17:42
    #33223830
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
Привет!

hbm.xml в студию...
...
Рейтинг: 0 / 0
18.08.2005, 18:14
    #33223914
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
	< class  name="MatchRecord">
		<id name="num" type="long" >
			<generator  class ="assigned"/>
		</id>
		<property name="name" type="string" length="100"/>
		<property name="type" type="string" length="30"/> <!-- CONTENT_NAME -->
		<property name="sku" type="string" length="30"/>
		<property name="prognum" type="string" length="20"/>
		<property name="match_type" type="string" length="30"/> <!-- MATCHED CONTENT_NAME -->
		<component name="updated"  class ="MatchDatabaseRecord"/>
		<component name="original"  class ="MatchDatabaseRecord">
			<property name="geneid" type="long"/>
			<property name="gi" type="long"/>
			<property name="accession" type="string" length="20"/>
			<property name="version" type="string" length="20"/>
			<property name="p_gi" type="long"/>
			<property name="p_accession" type="string" length="20"/>
			<property name="p_version" type="string" length="20"/>
			<property name="start" type="long"/>
			<property name="end" type="long"/>
		</component>
		<property name="match_status" type="string" length="30"/>
		<property name="reason" type="string" length="225"/>
		<property name="team" type="string" length="20"/>
		<property name="update_date" type="java.sql.Date"/>
		<property name="impact" type="string" length="8"/>
	</ class >

<!--=================================================================================-->


	<sql-query name="MatchRecordsLoader">
    < return  alias="rec"  class ="MatchRecord"/>
    	select 
    		rownum as {rec.num}, 
    		mr.CLEAN_NAME as {rec.name}, 
    		c.CONTENT_NAME as {rec.type},
    		mr.CLEAN_SKU as {rec.sku},
    		pp.PROGRAM_ID as {rec.prognum},
    		matchc.CONTENT_NAME as {rec.match_type},
    		mr.UPDATED_GENE_ID as {rec.updated.geneid},
    		mr.ORIGINAL_GENE_ID as {rec.original.geneid}
    	from MATCH_RECORDS mr
    	inner join CONTENT c on mr.CONTENT_ID = c.CONTENT_ID
    	inner join PRODUCT p on mr.PROD_ID = p.PROD_ID 
    	left outer join PRODUCT_PROGRAM pp on p.PROD_ID = pp.PROD_ID
    	inner join CONTENT matchc on mr.MATCH_CONTENT_ID = matchc.CONTENT_ID
	</sql-query>

...
Рейтинг: 0 / 0
18.08.2005, 18:23
    #33223937
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
Это так, пока вариант плясок с бубном ...
...
Рейтинг: 0 / 0
18.08.2005, 19:50
    #33224051
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
После кой-какого колдовства получил более-менее работающий коде ...
...
Рейтинг: 0 / 0
18.08.2005, 19:51
    #33224052
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
	< class  name="MatchRecord">
		<id name="id" type="long" >
			<generator  class ="assigned"/>
		</id>
		<property name="name" type="string" length="100"/>
		<property name="type" type="string" length="30"/> <!-- CONTENT_NAME -->
		<property name="sku" type="string" length="30"/>
		<property name="prognum" type="string" length="20"/>
		<property name="match_type" type="string" length="30"/> <!-- MATCHED CONTENT_NAME -->
		<component name="updated"  class ="MatchDatabaseRecord">
			<property name="geneid" type="long" insert="false" update="false"/>
			<property name="gi" type="long" insert="false" update="false"/>
			<property name="accession" type="string" length="20" insert="false" update="false"/>
			<property name="version" type="string" length="20" insert="false" update="false"/>
			<property name="p_gi" type="long" insert="false" update="false"/>
			<property name="p_accession" type="string" length="20" insert="false" update="false"/>
			<property name="p_version" type="string" length="20" insert="false" update="false"/>
			<property name="start" type="long" insert="false" update="false"/>
			<property name="end" type="long" insert="false" update="false"/>
		</component>
		<component name="original"  class ="MatchDatabaseRecord">
			<property name="geneid" type="long" insert="false" update="false"/>
			<property name="gi" type="long" insert="false" update="false"/>
			<property name="accession" type="string" length="20" insert="false" update="false"/>
			<property name="version" type="string" length="20" insert="false" update="false"/>
			<property name="p_gi" type="long" insert="false" update="false"/>
			<property name="p_accession" type="string" length="20" insert="false" update="false"/>
			<property name="p_version" type="string" length="20" insert="false" update="false"/>
			<property name="start" type="long" insert="false" update="false"/>
			<property name="end" type="long" insert="false" update="false"/>
		</component>
	</ class >

<!--=================================================================================-->

	<sql-query name="MatchRecordsLoader">
    < return  alias="rec"  class ="MatchRecord"/>
    	select 
    		mr.REPORT_ID as {rec.id},
    		mr.CLEAN_NAME as {rec.name}, 
    		c.CONTENT_NAME as {rec.type},
    		mr.CLEAN_SKU as {rec.sku},
    		pp.PROGRAM_ID as {rec.prognum},
    		matchc.CONTENT_NAME as {rec.match_type},
    		mr.UPDATED_GENE_ID as {rec.updated.geneid},
    		mr.UPDATED_GI as {rec.updated.gi},
    		mr.UPDATED_ACCESSION as {rec.updated.accession},
    		mr.UPDATED_VERSION as {rec.updated.version},
    		mr.UPDATED_P_GI as {rec.updated.p_gi},
    		mr.UPDATED_P_ACCESSION as {rec.updated.p_accession},
    		mr.UPDATED_P_VERSION as {rec.updated.p_version},
    		mr.UPDATED_START as {rec.updated.start},
    		mr.UPDATED_END as {rec.updated.end},
    		mr.ORIGINAL_GENE_ID as {rec.original.geneid},
    		mr.ORIGINAL_GI as {rec.original.gi},
    		mr.ORIGINAL_ACCESSION as {rec.original.accession},
    		mr.ORIGINAL_VERSION as {rec.original.version},
    		mr.ORIGINAL_P_GI as {rec.original.p_gi},
    		mr.ORIGINAL_P_ACCESSION as {rec.original.p_accession},
    		mr.ORIGINAL_P_VERSION as {rec.original.p_version},
    		mr.ORIGINAL_START as {rec.original.start},
    		mr.ORIGINAL_END as {rec.original.end}
    	from MATCH_REPORTS mr
    	inner join CONTENT c on mr.CONTENT_ID = c.CONTENT_ID
    	inner join PRODUCT p on mr.PROD_ID = p.PROD_ID 
    	left outer join PRODUCT_PROGRAM pp on p.PROD_ID = pp.PROD_ID
    	inner join CONTENT matchc on mr.MATCHED_CONTENT_ID = matchc.CONTENT_ID
	</sql-query>
...
Рейтинг: 0 / 0
19.08.2005, 00:21
    #33224182
gaper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
Создалось впечатление что всё это вы пишете своими руками. Медаль за это можно давать смело. Однако, без выборки первичного ключа (вариант А) вряд ли должно работать, поэтому бубнов тут не так уж и много. Могу только посоветовать использовать xdoclet для генерации дескриптора. Также создалось впечатление, что запрос писать совершенно необязательно, если сконцентрировать внимание на построении классов. Например, почему не сделать класс Content и изменить "String getType()" на "Content getType()". Тоже самое с match_type.

Итого: таблицы не трогаем, а строим классы на основе таблиц и связей. Тогда не придётся колдовать с запросами.
...
Рейтинг: 0 / 0
19.08.2005, 17:01
    #33225883
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
2 gaper.
Я думаю, просто есть разные подходы. Я иду от базы. Для меня чем меньше жабского коде, тем лучше. Может я и не прав. Например, класс Content мне не к чему. Мне тольки нужно имя его 2 раза получить и все.
Я согласен, что можно нагородить кучу классов и мой SQL-ный кирпич вообще спрятать. А вот нужно ли это? На мой взгляд, пока нет.
Ище небольшое пояснение - сей коде, не кусок большого проекта, где классы могут использоваться, а маленький проектик сам по себе - полезть в базу, вытащить список строчек, по ним построить мыло и разослать. И все.
А что касаемо rownum как первичного ключа - все работало. Но я подумал, раз уж есть RECORD_ID, так почему бы его и не использовать ...
...
Рейтинг: 0 / 0
19.08.2005, 17:10
    #33225903
gaper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
Так я предложил "идти от базы". Лишний класс (или десяток классов) Вам ничего не испортит. Если хотите выжать производительность, может быть лучше пойти через jdbc?
...
Рейтинг: 0 / 0
23.08.2005, 12:50
    #33229753
AciD_v
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: Nested Objects & Named Query
Я только не пойму зачем загружать систему Хибернэйтом, если для получения объектов используется обычный запрос! А как же маппинг полей классов на поля таблиц и другие преимущества Хибернэйт, ради которых его и используют!

В даном подходе кроме понижения производительности система больше ничего не получит.

Или я ошибаюсь?..
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: Nested Objects & Named Query / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]