powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / OJB(Выполнение запроса из двух таблиц которые связаны 1:N)
1 сообщений из 1, страница 1 из 1
OJB(Выполнение запроса из двух таблиц которые связаны 1:N)
    #32888007
maxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть связь между таблицами author и book (1:n) .
Эту связь я задал в файле repository_user.xml


<!-- AUTHOR-->
<class-descriptor
class="ua.ojb.Author"
table="author">

<field-descriptor
name="author_id"
column="author_id"
jdbc-type="INTEGER"
primarykey="true"
/>
<field-descriptor
name="author_name"
column="author_name"
jdbc-type="VARCHAR"
/>

<collection-descriptor
name="books"
element-class-ref="ua.ojb.Book"
auto-retrieve="true"
auto-update="true"
auto-delete="true">

<inverse-foreignkey field-ref="authorid"/>
</collection-descriptor>

</class-descriptor>


<!-- BOOK -->
<class-descriptor
class="ua.ojb.Book"
table="book">

<field-descriptor
name="book_id"
column="book_id"
jdbc-type="INTEGER"
primarykey="true"
/>
<field-descriptor
name="title"
column="title"
jdbc-type="VARCHAR"
/>
<field-descriptor
name="authorid"
column="authorid"
jdbc-type="INTEGER"
/>
<field-descriptor
name="price"
column="price"
jdbc-type="INTEGER"
/>
</class-descriptor>

Эта связь задана правильно и работает

База на MySql

Фрагмент bean класов

public class Author {
private Integer author_id;
private String author_name;
private Collection books;
....................................

public class Book {
private Integer book_id;
private String title;
private Integer price;
private Integer authorid;
...................................

Нужно написать запрос

select author.author_id
where author.author_id = book.authorid and book.price = 100

так как таблици связаны 1:N то с помощью следующего кода

Criteria crit = new Criteria();
QueryByCriteria query = new QueryByCriteria(Author.class,crit);
res = broker.getCollectionByQuery(query);

мы получим колекцию Author , каждый елемент которой содержит солекцию Book .
Но так как в таблице Book даных очень много, то мне нужно поставить фильтр price = 100. Чтоб уже получить колекцию Author , каждый елемент которой содержит солекцию Book у которой price = 100.

Я пытался это сделать разными способами но ничего не получилось.
Вот один из способов :

Collection res = null;

Criteria subCrit = new Criteria();
Criteria crit = new Criteria();

subCrit.addEqualTo("price ",new Integer(100));
ReportQueryByCriteria subQuery = QueryFactory.newReportQuery(Book.class, subCrit);
subQuery.setColumns(new String [] { "authorid" });

crit.addColumnEqualToField("author_id",subQuery);
QueryByCriteria query = new QueryByCriteria(Author.class,crit);
res = this.persistenceBroker.getCollectionByQuery(query);

но к сожалению это не работает

Ребята, выручте пожалуйста.
Зарание благодарен!
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / OJB(Выполнение запроса из двух таблиц которые связаны 1:N)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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