0

データベース内の 2 つのテーブル、Dictionary テーブルと Token テーブルをマップするオブジェクトを作成しました。これら 2 つのテーブル間の結合を表すオブジェクト (クラス) は、DictionaryToken と呼ばれます。

クラスは次のとおりです。

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
 import javax.persistence.Id;
import javax.persistence.OneToMany;
 import javax.persistence.Table;

import org.apache.log4j.Logger;


@Entity
@Table(name="dictionary", catalog="emscribedxcode")

public class DictionaryToken { private static Logger LOG = Logger.getLogger(DictionaryToken.class);

private Long _seq;
private String _code;
private String _acute;
private String _gender;
private String _codeType;
private String _papplydate;
private String _capplydate;
private Long _tokenLength;
private List <TokenDictionary> _token;
private int _type;
private String _system;
private String _physicalsystem;
/*
 * type of 0 is a straight line insert type of 1 is a language dictionary
 * entyr type of 2 is a multiple token entry
 */
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "seq")
public Long getSeq() {
    return _seq;
}
public void setSeq(Long seq_) {
    _seq = seq_;
}

@Column(name = "code")
public String getCode() {
    return _code;
}
public void setCode(String code_) {
    _code = code_;
}

@Column(name = "acute")
public String getAcute() {
    return _acute;
}
public void setAcute(String acute_) {
    _acute = acute_;
}

@Column(name = "gender")
public String getGender() {
    return _gender;
}
public void setGender(String gender_) {
    _gender = gender_;
}

@Column(name = "codetype")
public String getCodeType() {
    return _codeType;
}
public void setCodeType(String codeType_) {
    _codeType = codeType_;
}

@Column(name = "papplydate")
public String getPapplydate() {
    return _papplydate;
}
public void setPapplydate(String papplydate_) {
    _papplydate = papplydate_;
}

@Column(name = "capplydate")
public String getCapplydate() {
    return _capplydate;
}
public void setCapplydate(String capplydate_) {
    _capplydate = capplydate_;
}


@Column(name = "token_length")
public Long getTokenLength() {
    return _tokenLength;
}
public void setTokenLength(Long tokenLength_) {
    _tokenLength = tokenLength_;
}
@OneToMany (mappedBy = "dictionarytoken", targetEntity = TokenDictionary.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public List<TokenDictionary> get_token() {
    return _token;
}
public void set_token(List<TokenDictionary> _token) {
    this._token = _token;
}
public void addToToken(TokenDictionary token){
    this._token.add(token);
}
@Column(name = "type")
public int getType() {
    return _type;
}
public void setType(int _type) {
    this._type = _type;
}
@Column(name = "physicalsystem")
public String get_physicalsystem() {
    return _physicalsystem;
}
public void set_physicalsystem(String _physicalsystem) {
    this._physicalsystem = _physicalsystem;
}
@Column(name = "codingsystem")
public String get_system() {
    return _system;
}
public void set_system(String _system) {
    this._system = _system;
}



   }

これが私の問題です。条件を追加しない限り、このオブジェクトでサービスを使用して問題なくクエリを実行できます。エントリを取得するメソッドは次のとおりです

public List<DictionaryToken> getDictionaryTokenEntries(String system) {
    Session session = null;
    List<DictionaryToken> dictonaries = new ArrayList<DictionaryToken>();
    try {
        session = HibernateUtils.beginTransaction("emscribedxcode");
           session.createCriteria(Dictionary.class).addOrder(Order.desc("codeType"))

        Criteria criteria = session.createCriteria(DictionaryToken.class);
                  /*******THIS IS THE PROBLEM STATEMENT*************************/
        if (system != null) {
            criteria.add(Restrictions.eq("codingsystem", system));
        }
                  /****************************************************************/
        // dictonaries = criteria.list();
        Order order = Order.asc("seq");
        criteria.addOrder(order);
        dictonaries = criteria.list();
        System.out.println("Dictionaryentries = " + dictonaries.size());

        // System.out.println("Dictionaries entries EVICT start...");
        // for(Dictionary dic : dictonaries){
        // session.evict(dic);
        // }
        // System.out.println("Dictionaries entries EVICT end");
    } catch (HibernateException e_) {
        e_.printStackTrace();
        NTEVENT_LOG.error("Error while getting List of Dictionary entries");
    } finally {
        if (session != null && session.isOpen()) {
            try {
                HibernateUtils.closeSessions();
            } catch (HibernateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    return dictonaries;
}

基準を追加すると、次のエラーが発生します。

org.hibernate.QueryException: プロパティを解決できませんでした: コーディング システム: com.artificialmed.domain.dictionary.model.DictionaryToken

オブジェクトの性質と関係があることはわかっています。これは、実際には辞書クラスと基礎となるテーブル、およびトークン クラスとテーブルの間の結合です。

フィールド コーディング システムは、辞書クラスのフィールドです。エイリアスを使用することになっていると思いますが、現在の状況でこれを行う方法がわかりません。どんな助けでも大歓迎です。

エリオット

4

1 に答える 1

0

これは初心者の問題でした。Hibernate では、テーブルを反映するモデルのゲッターとセッターが特定の形式である必要があります。getter は get+ である必要があります。name は、基になるテーブルのフィールド名です。セッターは set+ である必要があります。name は、基になるテーブルのフィールド名です。はい、名前の最初の文字は大文字にする必要があります。

于 2012-10-25T01:26:38.067 に答える