0

私は次のように宣言されたクラスを持っています

@Entity
@Table(name = "word", schema = "public")
public class Word implements java.io.Serializable {
    ...
    private ContentLanguage contentLanguage;
    ...
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "content_language_id", nullable = false)
    public ContentLanguageT getContentLanguage() {
        return this.contentLanguage;
    }

    public void setContentLanguage(ContentLanguage contentLanguage) {
        this.contentLanguage = contentLanguage;
    }
  ...

ContentLanguageは次のように宣言されています

    @Entity
    @Table(name = "content_language", schema = "public")
    public class ContentLanguage implements java.io.Serializable {

        private int id;
        private String value;
 ....

私のアクションでは、ContentLanguageフィールドのid = 1であるすべてのWordをクエリする必要があります。ContentLanguageクラスに対する条件を作成し、これをWordテーブルに対するCriteriaに追加できると思いましたが、これは明らかにそれを行う方法ではありません。 。比較的単純なタスクのためにSQLまたはHQLを使い始めたくないので、何かアイデアはありますか?

                public String execute() 
    {       
        //DetachedCriteria criteria1 = DetachedCriteria.forClass(ContentLanguageT.class);
        //criteria1.add(Restrictions.eq("id",1));
        DetachedCriteria criteria = DetachedCriteria.forClass(WordT.class);
        //criteria.add( criteria1 );
        criteria.add(Restrictions.eq("contentLanguageT", Integer.valueOf( contentLangID )));        
        allWords = wordDao.findByCriteria( criteria, 0, 50);        
        return SUCCESS;
    }
4

1 に答える 1

2

Word.contentLanguageタイプContentLanguageです。したがって、整数と比較することはできません。ContentLanguageとのみ比較できます。だから、どちらか

criteria.add(Restrictions.eq("contentLanguage.id", contentLanguageId));

またはあなたはします

criteria.add(Restrictions.eq("contentLanguage", 
                             session.load(ContentLanguage.class, contentLanguageId)));

このような単純な静的クエリには、HQLが本当に好きです。以下はもっと読みやすく直感的ではありませんか?

select w from Word w 
where w.contentLanguage.id = :contentLanguageId
于 2012-09-13T08:18:10.277 に答える