Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
DTSHNick
9 / 9 / 3
Регистрация: 29.05.2011
Сообщений: 74
#1

Извлечение данных из OneToMany связи

07.05.2013, 20:01. Просмотров 683. Ответов 5
Метки нет (Все метки)

Доброго времени суток!

Мне снова требуется ваша помощь)). Дело обстоит так:

У меня есть две таблицы: таблица "Items"и Таблица "Supplies". Мне надо сделать так, что бы коллекция Items хранилась в "Supplies". Делаю маппинг сущности:
Java
1
2
3
4
5
6
7
8
9
10
11
12
@OneToMany
private Collection<Items>itemsList=new ArrayList<>();
 
public Collection<Items> getItemsList() 
{
   return itemsList;
}
 
public void setItemsList(Collection<Items> itemsList) 
{
   this.itemsList = itemsList;
}
Далее в программе заполняю данные:
Java
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
Items it0=new Items();
Items it1=new Items();
Items it2=new Items();
 
 
it0.setSerialNumber("SERIAL NUMBER ZERO");
 
it1.setSerialNumber("SERIAL NUMBER FIRST");
 
it2.setSerialNumber("SERIAL NUMBER SECOND");
session.beginTransaction();
        
session.save(it0);
session.save(it1);
session.save(it2);
        
session.getTransaction().commit();
 
Supplies sp =new Supplies();
sp.setId(1);
sp.getItemsList().add(it0);
sp.getItemsList().add(it1);
sp.getItemsList().add(it2);
        
session.beginTransaction();
session.save(sp);
session.getTransaction().commit()
Все классно работает. Создается таблица supplies_items, все красиво и правильно.

Но вот надо мне теперь достать данные из этой таблицы. HQL запрос я сделать не могу, потому что "официально" таблица supplies_items не существует, значит делам классическим SQL-запросом:
SQL
1
SELECT * FROM `supplies_items`;
Данные достаются с таблицы в программе кодом:
Java
1
2
3
4
5
6
7
8
9
10
session.beginTransaction();
        
Query q = session.createSQLQuery("SELECT * FROM `supplies_items");
List resultList = q.list();
for(Object o : resultListq) {
    Supplies_Item res=new Supplies_Item();
    res=(Supplies_Item)o;
    System.out.print(resSPIT.getItemSerialNumber());
}
session.getTransaction().commit();
Конечно я создал класс Supplies_Item по структуре таблицы, где хранятся две переменные типа Items и Supplies, но увы пишет ошибка. Так же пробовал перевести это в тип Supplies, но результат тот же все равно:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to my.hibernate.entity.Supplies_Item
at my.hibernate.run.HibernateProject.main(HibernateProject.java:273)
Java Result: 1
Я так понял тут проблема с типом возвращаемого значения. Подскажите кто чем может))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 20:01
Ответы с готовыми решениями:

Извлечение данных из БД mysql
Здравствуйте, такой вопрос - пытаюсь поставить драйвер JDBC, скачал положил в...

Извлечение данных из MySQL
Здравствуйте. Подскажите, в чем может быть причина. Задача состоит в выводе...

Hibernate OneToMany очень долгая загрузка
Добрый вечер. Есть две сущности - Client и Receipt. У одного клиента может...

Извлечение данных с сайта и загрузка этих данных в эксель
Всем доброго суток. Вопрос такого плана. Есть подраздел на сайте. В качестве...

извлечение данных из базы данных и работа с ними
Здравствуйте! я начинающий программист и нужна ваша помощь. мне нужно написать...

5
AckiyBolt
649 / 398 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
07.05.2013, 21:22 #2
а накой вам сдалась сущность Supplies_Item?
0
DTSHNick
9 / 9 / 3
Регистрация: 29.05.2011
Сообщений: 74
07.05.2013, 21:50  [ТС] #3
Цитата Сообщение от AckiyBolt Посмотреть сообщение
а накой вам сдалась сущность Supplies_Item?
Мне надо от туда достать значение, если я что-то делаю не правильно, я готов это признать.

Там хранятся товары которые отправлены в какой-то поставке. И мне надо забрать данные от туда в программу.
0
AckiyBolt
649 / 398 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
08.05.2013, 03:18 #4
смотрите на аналогию, не на аннотации. у вас например есть пост:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity
@Table(name = "posts")
public class Post {
 
    @Id
    @Column(name = "id")
    protected Long id;
 
    @OneToMany
    @JoinColumn(name="comment_id")
    protected List<Comment> comments;
 
    ...
}
и каммент:

Java
1
2
3
4
5
6
7
8
9
10
11
@Entity
@Table(name = "comments")
public class Comment {
 
    @Id
    @Column(name = "id")
    protected Long id;
 
    @ManyToOne
    protected Post post;
}
и тут где-то в коде так хренакс:

Java
1
2
3
4
Post post = postDao.find(1); // через дао с энтети менеджером ищем сущность по айдишнику
List<Comment> commentsOfThisPost = post.getComments(); // получаем относящиеся к нему камменты
commentsOfThisPost.add(someNewPost); // пихаем к ним новенького
postDao.update(post); // апдейтим пост
и вуаля. имеем свеженькую запись в таблице каментов
это особая, JPAшная, магия

к стати, промежуточная таблица обычно юзаеться при связях многие-ко-многим
1
DTSHNick
9 / 9 / 3
Регистрация: 29.05.2011
Сообщений: 74
08.05.2013, 13:47  [ТС] #5
AckiyBolt, спс)))
Я наверно сделал по другому, но по аналогии:
Java
1
2
3
4
5
6
7
8
9
Post post=new Post ();
post=(Post)session.load(Post .class, 1);
List<Comment> commentsOfThisPost= (List<Comment>) supfind.getCommentsList();
for (int i=0;i<commentsOfThisPost.size();i++)
{
    Comment findComment=commentsOfThisPost.get(i);
    System.out.println(findComment.getText());
}
session.getTransaction().commit();
Еще раз спасибо
0
AckiyBolt
649 / 398 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
08.05.2013, 14:33 #6
йор велкам
0
08.05.2013, 14:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 14:33

Извлечение данных из базы данных построчно
как извлечь построчно данные из базы данных так, чтобы можно было оперировать...

Извлечение данных из базы данных в dataGridView1
Я извлекаю данные следующим найденным способом: private void...

Hibernate OneToMany, ManyToOne и тд
Добрый день. В очередной раз переписывая код возник вопрос. А в чем смысл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru