0

これは別の質問に関連する質問です。

Transformerを使用する場合のHibernate例外PropertyNotFoundException

hqlに参加しているテーブルがいくつかあります。テーブルは次のようになります。

A
- A_ID
- NAME

B
- B_ID
- A_ID

C
- C_ID
- B_ID
- LENGTH
- UNIT

クラス:

@Entity
@Table(name="A")
class A
{
    @Id
    @Column(name="A_ID", updatable=false)
    private Long id;

    @Column(name="NAME", nullable=false, length=10, updatable=false)
    private String name;

    @OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade={CascadeType.ALL})
    @JoinColumn(name="A_ID", nullable=false)
    private Set<B> bs;

    // Setters and getters
    ...
}

@Entity
@Table(name="B")
class B
{
    @Id
    @Column(name="B_ID", updatable=false)
    private Long id;

    @ManyToOne
    @JoinColumn(name="A_ID", nullable=false, insertable=true, updatable=false)
    private A a;

    @OneToMany(mappedBy="b", fetch=FetchType.LAZY, cascade={CascadeType.ALL})
    @JoinColumn(name="B_ID", nullable=false)
    private Set<C> cs;

    @Transient
    private Double length;

    @Transient
    private String unit;

    // Setters and getters
    ...
}

@Entity
@Table(name="C")
class C
{
    @Id
    @Column(name="C_ID", updatable=false)
    private Long id;

    @ManyToOne
    @JoinColumn(name="B_ID", nullable=false, insertable=true, updatable=false)
    private B b;

    @Column(name="LENGTH", nullable=false, updatable=false)
    private Double length;

    @Column(name="UNIT", nullable=false, length=10, updatable=false)
    private String unit;

    // Setters and getters
    ...
}

その問題を解決した後、それは今このようになっています:

select b.id as id, sum(c.length) as length, min(c.unit) as unit
from B b
left outer join b.c as c
group by b.id

今問題は次のとおりです。

HQLで返されたBオブジェクトにAのエイリアスを設定する方法がわかりません。私がこれをしているとき、これはNPEを引き起こしています:

b.getA().getName();

BテーブルにはIDしかないので、関連オブジェクト「A」と「B」の設定方法がわからないため。

助けてください。どうもありがとうございます。

4

1 に答える 1

1

b.getA().getName();select b.id as id, sum(c.length) as length, min(c.unit) as unit from B bが含まれていないため、これは NPE をスローしますA。HQL クエリで select 句を使用すると、前述のフィールドのみが返されます。

詳細については、 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.htmlを参照してください。

編集:

提供されたドキュメントを読むと、 が表示されますselect cat.mate from Cat cat。これはクエリに組み込むことができます。b.Aselect句を追加すると、機能するはずです。

編集:

select b.id as id, sum(c.length) as length, min(c.unit) as unit from B b left outer join b.c as c group by b.id 機能 する場合select b.id as id, sum(c.length) as length, min(c.unit) as unit, b.A from B b left outer join b.c as c group by b.id, b.A は、同様に行う必要があります。

于 2012-12-13T08:43:26.440 に答える