1

私はこの休止状態のことで立ち往生していて、それを理解する方法がわかりません。助けてください !

だから私はこれらの2つのテーブルを持っています:

POSITION
positionid(PK), description

JOB
jobid(PK),positionid(FK),description

HibernateでHQLを使用して、対応する位置の説明とともにすべてのジョブをフェッチするにはどうすればよいですか?

編集:これが私が達成しようとしていることです:

JOBID     POSITION.DESCRPTION     JOB.DESCRIPTION
  1        Teacher                Science Teacher
  2        Coach                  Football Coach

JOBテーブル内のすべてのジョブについても同様です。私はこれのためにHQLが何になるかを理解しようとしています。

私はこれまで次のコードをまとめました:

position.hbm.xml

<hibernate-mapping>
  <class name="com.XXXX.model.Position" table="POSITION">
   <id name="positionID" type="int" column="POSITIONID" >
   <generator class="assigned"/>
  </id>

  <property name="description">
   <column name="DESCRIPTION" />
  </property>

  <set name="jobs">
    <key column="positionID" />
    <one-to-many class="com.XXXX.model.Job" />
  </set>

 </class>
</hibernate-mapping>

job.hbm.xml

<hibernate-mapping>

  <class name="com.XXXX.model.Job" table="JOB">
   <id name="jobID" type="int" column="JOBID" >
   <generator class="assigned"/>
  </id>

  <property name="description">
   <column name="DESCRIPTION" />
  </property>

  <many-to-one name="position" class="com.XXXX.model.Position" column="positionID" />

 </class>
</hibernate-mapping>

Position.java

public class Position {

    private int positionID;
    private String description;
    private Set<Job> jobs = new HashSet<Job>();

    // Getters and Setters for all the above three follows...

}

Job.java

public class Job {

    private int jobID;
    private String description;
    private Position position;

    // Getters and Setters for all the above three follows...
}

私のコードでは今使用しています

session.createQuery("from Position as p left join p.positionID as pid").list();

私はそれが正確に正しくないことを知っています、そして私は次のエラーを受け取ります:

java.lang.NullPointerException
    at org.hibernate.hql.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:317)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3268)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3060)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2938)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
    .........................
    ...........................

誰かがこれを修正する方法を教えてもらえますか?

4

2 に答える 2

5

これらの3つの列のみが必要な場合、HQLは次のようになります。

select job.id, position.decription, job.description 
from Job job
left join job.position position

このクエリはを返しList<Object[]>、リスト内の各オブジェクト配列にはこれら3つの要素が含まれます。

ただし、このクエリを使用する方がはるかに自然です。

select job from Job job
left join fetch job.position

これにより、すべてのジョブがその位置でロードされます。クエリはリストを返し、、、、およびを使用してjob.getId()、必要な3つの情報にアクセスできます。job.getPosition().getDescription()job.getDescription()

HQLの構文は、必読のリファレンスドキュメントの例で説明されています。

于 2012-05-12T20:33:36.043 に答える
0

PositionオブジェクトからgetJobs()を取得できると思います

于 2012-05-12T15:33:58.010 に答える