【问题标题】:hibernate join table mysql休眠连接表mysql
【发布时间】:2013-04-20 21:07:14
【问题描述】:

我有两个简单的表格。

    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) 用户 ID 2) 所有者

现在假设 userId=3 和 owner=1。现在我想输出匹配文件共享表中给定值的所有行,在这种情况下,它的第二行是“2 | 3 | 1 | 1”现在我想要第三列的值现在是 1。然后使用该值,我想从 filesinfo 表中检索数据。在这种情况下,filesinfo 表的第一行将输出。像这样:

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

是否可以通过使用 hibernate 进行连接,一个简单的示例对我来说是一个入门。

我试过了

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 |
+--------+-----------------+-----------------------------------+

感谢和问候

【问题讨论】:

  • 是否需要在实体类中定义-@onetomany和-@joincolumn才能在hql中使用join?

标签: mysql hibernate join


【解决方案1】:

在hibernate中你可以通过两种方式来处理它:

  • 使用普通的 sql

    示例: SQLQuery query = session.createSQLQuery("select fi.* from fileshare fs, filesinfo fi where fs.fileId =fi.id and fs.userId = :uid and 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
    

【讨论】:

  • 这种情况下如何映射实体?请告诉我
  • 是否需要在实体类中定义-@onetomany和-@joincolumn才能在hql中使用join? @Max Dron
【解决方案2】:

Select id,name,url from fileshare fs,filesinfo fi where fs.id=fs.id;

【讨论】:

  • 嗨。我曾经编辑过这个问题,我尝试过类似的查询。并在那里输出
  • 为什么要使用 id 列?请提供少量描述,以明确问题。
  • 是否可以使用像 join 这样的单个查询?
  • inner jopin 会有帮助的
【解决方案3】:

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)

【讨论】:

  • 如何对休眠注解做同样的事情
猜你喜欢
  • 2016-09-07
  • 2012-05-28
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多