0

私のコードは次のようになります: 2 つのテーブルでデータを選択したい

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

org.hibernate.QueryException: プロパティを解決できませんでした: d_id of: com.xunfang.em_mallServer.bean.DetailType [com.xunfang.em_mallServer.bean.MainType から新しい DetailVoMain(d.d_id,d.d_name,m.m_name) を選択しますm, com.xunfang.em_mallServer.bean.DetailType d where d.d_main_id = m.m_id] at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83) at org.hibernate.persister.entity.AbstractPropertyMapping .toType(AbstractPropertyMapping.java:77) at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1968) at org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:313) ) org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:490) で org.hibernate.hql.internal.ast.tree.DotNode.org.hibernate.hql.internal.ast.tree.DotNode.prepareLhs(DotNode.java:267) の getDataType(DotNode.java:616) org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode. java:214) org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:119) で org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:115) でorg.hibernate.hql.internal.ast.tree.DotNode.resolveSelectExpression (DotNode.java:678) で org.hibernate.hql.internal.ast.HqlSqlWalker.resolveSelectExpression (HqlSqlWalker.java:893) で org.hibernate.hql .internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2208) org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.constructor(HqlSqlBaseWalker.java:2502) org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr (HqlSqlBaseWalker.java:2275) org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2145) で org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1451) で org.hibernate.hql .internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:571) org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299) org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement (HqlSqlBaseWalker.java:247) org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:249) で org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:184) でorg.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:137) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:105) org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:80) で org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168) で org.hibernate.internal. org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199) の AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221) com.xunfang.em_mallServer の org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1778) .util.Test.main(Test.java:39)com.xunfang.em_mallServer.util.Test.main (Test.java:39) で hibernate.internal.SessionImpl.createQuery (SessionImpl.java:1778)com.xunfang.em_mallServer.util.Test.main (Test.java:39) で hibernate.internal.SessionImpl.createQuery (SessionImpl.java:1778)

私を助けてください、私は一晩中テストしています!

私の 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>

次のような DetailType エンティティ:

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>

助けてくれてありがとう!

4

1 に答える 1

0

HQLたとえば、dId(の代わりに)マッピングプロパティを使用して、正しく書く必要がありますd_id
エンティティ間の関係を追加する必要があります (つまりOneToManyManyToOne)。
その後、 内の別のエンティティに参加できますhql

于 2013-09-02T23:12:03.603 に答える