2013-04-26 5 views
0

У меня есть две простые таблицы.hibernate join table mysql

mysql> select * from filesshare; 
+----+--------+--------+-------+ 
| id | userId | fileId | owner | 
+----+--------+--------+-------+ 
| 1 |  2 |  1 |  1 | 
| 2 |  3 |  1 |  1 | 
| 3 |  4 |  2 |  1 | 
| 4 |  5 |  2 |  1 | 
+----+--------+--------+-------+ 
4 rows in set (0.00 sec) 

mysql> select * from filesinfo; 
+----+-----------------+-----------------------------------+ 
| id | name   | url        | 
+----+-----------------+-----------------------------------+ 
| 1 | dwnld_btn.png | C:\shareapp\admin\dwnld_btn.png | 
| 2 | dwnld_btn_1.png | C:\shareapp\admin\dwnld_btn_1.png | 
+----+-----------------+-----------------------------------+ 
2 rows in set (0.01 sec) 

У меня будет два значения в качестве входных данных. 1) userId 2) владелец

теперь предположим, что userId = 3 и owner = 1. Теперь я хочу, чтобы put, чтобы соответствовать всем строкам с заданными значениями в таблице filesshare, в этом случае его вторая строка, которая является «2 | 3 | 1 | 1», теперь я хочу, чтобы этот столбец три значения, которое теперь равно 1. Затем с этим значением я хочу получить данные из таблицы filesinfo. в этом случае первая строка таблицы filesinfo будет выводить. как это:

+----+-----------------+-----------------------------------+ 
| id | name   | url        | 
+----+-----------------+-----------------------------------+ 
| 1 | dwnld_btn.png | C:\shareapp\admin\dwnld_btn.png | 
+----+-----------------+-----------------------------------+ 

является то, что возможно с помощью соединения, использующие в спящий режим, простой пример может быть Кикстарт для меня.

я попробовал этот

mysql> Select fileid,name,url from filesshare fs,filesinfo fi where fs.fileid=fi 
.id; 
+--------+-----------------+-----------------------------------+ 
| fileid | name   | url        | 
+--------+-----------------+-----------------------------------+ 
|  1 | dwnld_btn.png | C:\shareapp\admin\dwnld_btn.png | 
|  1 | dwnld_btn.png | C:\shareapp\admin\dwnld_btn.png | 
|  1 | dwnld_btn.png | C:\shareapp\admin\dwnld_btn.png | 
|  1 | dwnld_btn.png | C:\shareapp\admin\dwnld_btn.png | 
|  2 | dwnld_btn_1.png | C:\shareapp\admin\dwnld_btn_1.png | 
|  2 | dwnld_btn_1.png | C:\shareapp\admin\dwnld_btn_1.png | 
|  2 | dwnld_btn_1.png | C:\shareapp\admin\dwnld_btn_1.png | 
|  2 | dwnld_btn_1.png | C:\shareapp\admin\dwnld_btn_1.png | 
+--------+-----------------+-----------------------------------+ 

Спасибо и рассматривает

+0

ли необходимый определить - @ onetomany и - @ joincolumn в классе сущности использовать соединения в hql? – Aadam

ответ

1

в спящем режиме вы можете иметь дело с этим двух способами:

  • использования обычного SQL

    пример:. SQLQuery запроса = session.createSQLQuery ("выбери ц * от Обменник фс, filesinfo fi где fs.fileId = fi.id и fs. userId =: uid и fs.owner =: oid "); query.setInteger ("uid", userid); query.setInteger ("oid", ownerid);

    /*maybe deal with transformation */ 
        query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);) 
        return (List<Map<String,Object>>)query.list(); 
    

    здесь связь с информацией о деталях преобразования: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html#querycriteria-associations

  • использование HQL предполагается, что вы сущность сопоставляются с

    пример:

    Criteria crit = session.createCriteria(Filesinfo.class) 
        crit.setFetchMode("fs.fileshare", FetchMode.JOIN); 
        crit.add(Restrictions.eq("fs.userId", userid) Restrictions.eq("fs.owner", ownerid)); 
        return crit.list(); 
    
    all info on this method is here: http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/queryhql.html 
    
    and here is the details of teh ORM mapping via xml: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/xml.html 
    
+0

как отобразить объекты в этом случае? пожалуйста, позвольте мне kno – Aadam

+0

Нужно ли определять - @ onetomany и - @ joincolumn в классе сущности для использования объединений в hql? @Max Dron – Aadam

0

Выберите идентификатор, имя, URL из Обменник фс, filesinfo ц, где fs.id = fs.id;

+0

привет. Я отредактировал вопрос, как только посмотрю, я попробовал с похожим запросом. и вывод также там – Aadam

+0

Почему вы используете столбец id? plz предоставляют небольшое описание, чтобы четко сформулировать вопрос. –

+0

эй, пожалуйста, проверьте сейчас, я думаю, что его очень ясно сейчас – Aadam

0

k ребята, этот один после царапин на голове, конечно, помощь от Google.

 mysql> select a.id, a.name, a.url from filesinfo a inner join filesshare b on 
a.id=b.fileid where b.userid=5 and b.owner=1; 
    +----+-----------------+-----------------------------------+ 
    | id | name   | url        | 
    +----+-----------------+-----------------------------------+ 
    | 2 | dwnld_btn_1.png | C:\shareapp\admin\dwnld_btn_1.png | 
    | 4 | loader3.gif  | C:\shareapp\admin\loader3.gif  | 
    +----+-----------------+-----------------------------------+ 
    2 rows in set (0.02 sec) 
+0

как сделать то же самое с аннотациями спящего режима – Aadam