1

ManyToOne 関係を持つ 2 つのテーブルがあります。ManyToOne 関係の特定の行を表示する必要がありますが、ページにもコンソールにも何も表示されません。(Hibernateは私のコードの他の部分の生成されたSQLを表示しますが、生成されたSQLは表示されません)

Project.java

@Entity
@Table(name = "Project")
@DynamicUpdate
public class Project implements Serializable{ 

  private int id;
  private String Name;
  private Developer developer;

  @Id
  @GeneratedValue
  public int getID() {
      return id; 
  }

  @ManyToOne(cascade = CascadeType.ALL)
  public Developer getDeveloper() {
     return developer;
  }
  ....

}

開発者.Java

@Entity()
@Table(name = "developer")
@DynamicUpdate
public class Developer implements Serializable {    
  private int id;
  private String name;

  @Id
  @GeneratedValue
  public int getID() {
      return id; 
  }
  .....
}

モデル.Java

        Criteria criteria = session.createCriteria(Project.class, "project")
                .createAlias("project.developer", "developer");
        try{
        ProjectionList pl = Projections.projectionList();
        pl.add(Projections.property("project.id").as("id"));
        pl.add(Projections.property("project.name").as("name"));

        criteria.setProjection(pl);

        criteria.setResultTransformer(new
             AliasToBeanResultTransformer(ListOfProjectsSearchResult.class));

         criteria.add(Restrictions.eq("developer.id", 1));
        }catch(Exception e){

          e.printStackTrace();
        }

        return criteria.list();
4

1 に答える 1

0

射影リストにフィールドを含めていないためDeveloper、Hibernate はそのテーブルのフィールドを返しません。WHEREただし、次の生成された SQL クエリで示されているように、この句により、Developer テーブルとの内部結合が作成されます。

select
    this_.id as y0_,
    this_.name as y1_
from Project this_
    inner join developer developer1_
        on this_.developer_id=developer1_.id
where developer1_.id=?

射影リストに のフィールドをDeveloper追加すると、Hibernate はそのフィールドをSELECT生成されたクエリの句に追加します。

コードに追加します。

pl.add(Projections.property("developer.name").as("developerName"));

developerNameクラスに属性がListOfProjectsSearchResult存在しない場合は追加し、コードを再度実行します。生成された SQL クエリは次のようになります。

select
    this_.id as y0_,
    this_.name as y1_,
    developer1_.name as y2_
from Project this_
    inner join developer developer1_
        on this_.developer_id=developer1_.id
where developer1_.id=?
于 2013-06-26T07:41:15.530 に答える