当前位置: 首页 > 知识库问答 >
问题:

Hibernate如何使用hql创建内连接

唐高卓
2023-03-14

我有两个由onetomany映射的实体类:

@Entity
public class FilesInfo {
    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private String url;

    @OneToMany(cascade= CascadeType.ALL)
    @JoinColumn(name="fileId")
    private Collection<FilesShare> filesShared = new ArrayList<FilesShare>();

    public Collection<FilesShare> getFilesShared() {
        return filesShared;
    }

    public void setFilesShared(Collection<FilesShare> filesShared) {
        this.filesShared = filesShared;
    }
 //getters & setters   
}

另一个

@Entity
public class FilesShare {
    private Integer id;
    private int userId;
    private int owner;
}

结果和表格如下:

mysql> desc filesshare;
+--------+---------+------+-----+---------+----------------+
| Field  | Type    | Null | Key | Default | Extra          |
+--------+---------+------+-----+---------+----------------+
| id     | int(11) | NO   | PRI | NULL    | auto_increment |
| userId | int(11) | NO   |     | NULL    |                |
| owner  | int(11) | NO   |     | NULL    |                |
| fileId | int(11) | YES  | MUL | NULL    |                |
+--------+---------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> desc filesinfo;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
| url   | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

现在,我正在尝试执行内部联接并获取fileinfo类型的列表:

    @Override
        public List<FilesInfo> reqSharedFiles(FilesShare fs) {
            session=HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            List<FilesInfo> filesInfo = null;
            filesInfo=session.createQuery("select a.id, a.name, a.url from FilesInfo as a 
            inner join FilesShare as b on "+
            " a.id=b.fileId where b.userId= :userId and b.owner= :owner")
           .setInteger("userId",fs.getUserId()).setInteger("owner",fs.getOwner()).list();
            session.getTransaction().commit();
            return filesInfo;
        }

我得到了这个错误

Struts检测到一个未处理的异常:Messages:
org。冬眠hql。antlr。HqlBaseParser。恢复(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V文件:org/hibernate/hql/antlr/HqlBaseParser。java行号:1802应用程序。刀。上传daoimpl。ReqSharedFile(uploadaoimpl.java:79)

请告诉我哪里错了?

谢谢

共有1个答案

劳研
2023-03-14

这是您正在使用的hibernate和ANTLR JAR版本的问题。直到版本2.7.6,恢复方法才出现在ANTLR解析器类中?如果您使用的是ANTLR的早期版本,如2.7.2,那么您将遇到问题。

看这里

 类似资料:
  • 我使用的是Struts-Spring-Hibernate,我很难让我的HQL正确执行。 我有四个对象,objectA、objectB、objectC和objectD。对象A与对象B之间有一对多关系,它们之间的关系就像ObjectB与FK ObjectA之间的关系一样。Id。该模式在对象中延续,即对象B与对象C等有一对多关系。 我现在一直在做的是调用“从对象XVO到对象XId=?”来获取对象列表。我

  • 如何在临时文件中获取名称以便在此查询中设置? 谢谢。

  • 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我尝试用多种方法构建工作选择查询,但仍然不起作用。 也许实体有问题?

  • 问题内容: 我正在使用和。我以前在sql中使用过正则表达式,现在是我第一次在HQL中使用它。 这是我的hql,当我不带功能运行它时,它按预期运行。但是我不能用表达式执行它。 它说.. 嵌套的异常是org.hibernate.hql.ast.QuerySyntaxException:意外的AST节点:(靠近第1行,第66列..... 请帮助,如何在hibernate本机查询中使用?或其他替代方法。

  • 我正在使用oracle 10g和hibernate 3.3.2。我以前在sql中使用过正则表达式,现在我第一次在HQL中使用它。 这是我的hql,当我在没有类似regex_的函数的情况下运行它时,它会按预期运行。但我无法用类似正则表达式的表达式执行它。 它说... 嵌套异常是org.hibernate.hql.ast.QuerySynTaxException:意外的AST节点:(靠近第1行,第66

  • 我想使用hibernate对距离进行排序,但“st_distance”不起作用。日志: ----org.hibernate.queryexception:node:org.hibernate.hql.internal.ast.tree.methodnode-[METHOD_CALL]methodnode:'('+-[METHOD_NAME]identnode:'st_distance‘{Origi