【问题标题】:Table is not Mapped In HQL query表未在 HQL 查询中映射
【发布时间】:2020-05-04 09:15:24
【问题描述】:

我的课开始于:

@Entity
@Table(name = "validate_info", catalog = "company")
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class ValidateInfo implements java.io.Serializable{

还有我的 HQL 查询:

        List<ValidateInfo> lResult = null;

        String lHql = " from ValidateInfo vi "
                        + " where vi.document.idDocument in (:documentsList) "
                        + " and vi.idEntityType = :idEntityType";

        Query lQuery = pSession.createQuery(lHql);
        lQuery.setParameterList("documentsList", pDocumentsList);
        lQuery.setParameter("idEntityType", pIdEntityType);
        lResult = lQuery.list();

我得到的错误:

[T0028][SEVER] .web.Control.execute() RunService returns Exception  ValidateInfo is not mapped [ from ValidateInfo vi  where vi.document.idDocument in (:documentsList)  and vi.idEntityType = :idEntityType]
[T0028][SEVER] .web.Control.manageError()  java.util.HashMap cannot be cast to java.util.List

你们能帮帮我吗?我不知道为什么会出现“未映射”错误,HQL 查询表的名称与类名相同。

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    当您编写HQL 查询时,您必须编写所用类的完整路径。

    所以你可以替换你的代码如下:

    String lHql = " from " + ValidateInfo.class.getName() + " vi "
    + " where vi.document.idDocument in (:documentsList) "
    + " and vi.idEntityType = :idEntityType";
    

    【讨论】:

    • 但我没有得到的是,例如,如果我使用另一个表进行 HQL 查询,我不需要你输入的内容。比如“from Driver where idDriver = 1234”,这个就完美了
    • @Martinez 如果使用别名,则必须明确正确的路径
    • 我只是不明白为什么我必须在这张桌子上使用它而不是在 "Driver" 的桌子上使用它,如果两者完全相同的话。
    • @Martinez 在您的验证示例中,您是 ugins 别名 vi,在您的驱动程序示例中没有。不是一回事
    猜你喜欢
    • 2013-01-04
    • 2017-04-26
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多