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

如何使用hibernate hql在两个表中选择数据?

戚锦
2023-03-14

我的代码是这样的:我想选择两个表中的数据

    // ArrayList<DetailType> list = null;
    SessionFactory sf = null;
    Session ses = null;
    try {

        Configuration cfg = new Configuration().configure();
        ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(
                cfg.getProperties()).buildServiceRegistry();
        sf = cfg.buildSessionFactory(sr);
        ses = sf.openSession();
        // 执行查询语句

        String hql = "select new DetailVoMain(d.d_id,d.d_name,m.m_name)"
                + "from MainType m, DetailType d "
                + "where d.d_main_id = m.m_id";
        Query query = ses.createQuery(hql);

        List<?> list = query.list();
        for (int i = 0; i < list.size(); i++) {
            DetailVoMain detailType = (DetailVoMain) list.get(i);
            System.out.println("dId-------->" + detailType.getdId());
            System.out.println("dNam-------->" + detailType.getdName());
            System.out.println("mNam-------->" + detailType.getmName());
        }
    } catch (HibernateException e) {
        System.out.println("hibernate exception");
        e.printStackTrace();

    } finally {
        ses.close();
        sf.close();
    }

和myeclipese给出错误消息:

hibernate exception

请帮帮我,我测试了一整夜!

我的MainType实体如下所示:

public class MainType {
private String mId; // 编号
private String mName; // 类别名称

public String getmId() {
    return mId;
}

public void setmId(String mId) {
    this.mId = mId;
}

public String getmName() {
    return mName;
}

和映射,如下所示:

<hibernate-mapping package="com.xunfang.em_mallServer.bean">

<class name="MainType" table="t_main_type"> <!-- 设置表名和字段对应数据 -->
    <id name="mId" column="m_id" type="string">

    </id>
    <property name="mName" column="m_name" type="string"></property>

</class>
public class DetailType {
/**
 * 小类编号
 */
private String dId;
/**
 * 小类名称
 */
private String dName;
/**
 * 归属大类编号
 */
private String dMainId;

public String getdId() {
    return dId;
}

public void setdId(String dId) {
    this.dId = dId;
}

public String getdName() {
    return dName;
}

public void setdName(String dName) {
    this.dName = dName;
}

public String getdMainId() {
    return dMainId;
}

public void setdMainId(String dMainId) {
    this.dMainId = dMainId;
}
<hibernate-mapping package="com.xunfang.em_mallServer.bean">

<class name="DetailType" table="t_detail_type"> <!-- 设置表名和字段对应数据 -->
    <id name="dId" column="d_id" type="string">

    </id>
    <property name="dName" column="d_name" type="string"></property>
    <property name="dMainId" column="d_main_id" type="string"></property>

</class>

共有1个答案

郎言
2023-03-14

您应该正确地编写HQL,使用映射属性,例如DID(而不是D_ID)。
您需要添加实体之间的关系(即OneTomany,ManyToOne)。
之后您可以在HQL中加入另一个实体。

 类似资料:
  • 问题内容: 我用来检索数据。我可以使用语句获取数据 现在,我可以使用以下名称获取相册名称: 现在我要获取专辑名称和角色用户的行名为 我正在使用查询 现在,当persons.get(0)返回一个对象时,如何获取名字和专辑行 通过运行代码: 我得到这个: 如何映射并获取和? 问题答案: 现在如何在persons.get(0)返回对象时获取行名和相册名 SELECT子句中具有多个 select_expr

  • 我正在使用liveScroll="true"和seltionMode="multi"的primeface v5.3 dataTable。标题复选框仅选择可见行,当我向下滚动时,新行显示为未选中。我希望标题复选框选择所有行:可见和不可见。仅选择可见行是毫无意义和无用的。是否可以修复? 我试图通过处理“toggleSelect、rowSelectCheckbox和rowUnselectCheckbox

  • 问题内容: 我有两个表: 我想从表1中选择所有具有值A和B的表2行的行。这将是行1和3(不是2行,因为它只有A,没有4行是因为只有B)。我可以在没有子查询的情况下执行此操作吗? (注意:我还需要查询表1中的值,因此我不能只查询表2。) 问题答案: 塔达阿!没有子查询。

  • 问题内容: 我有两个用于查询表中行的SQL查询,具体取决于类型2或3。 查询1: 查询2: 现在,我只想获取和使用一个查询的值。如何使用一个查询获得计数。有没有办法做到这一点。我正在使用SQLite数据库。 编辑: 我想要分别为和的值,而不是两者都在一起(不使用)。 问题答案: 尝试使用 对于两个变量:

  • 我得到了下面的SQL,我想将其转换为有效的HQL。这方面的问题是,不允许根据文档加入子查询。尽管这些是旧文档(v3.3),但在hibernate 5.3中,这一节似乎仍然适用。 我想出了这个HQL: 尝试执行此HQL查询会导致此异常 这将提示 在. 有没有办法加入HQL中的子查询?如果不是,那么获得与具有HQL的SQL相同的结果的最佳方法是什么? 我不擅长转换

  • 我想从具有相同user_id的两个表中获取所有数据,但我不知道要使用什么类型的联接,我想确定查询的语法。 “日程”表: