当前位置: 首页 > 知识库问答 >
问题:

使用映射类时的Hibernate条件

富念
2023-03-14

我创建了一个对象,它映射了数据库中的两个表:字典表和令牌表。表示这两个表之间连接的对象(类)称为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")

公共类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.查询异常:无法解析属性:com.artificialmed.domain.dictionary.model.DictionaryToken的编码系统

我知道这与对象的性质有关,对象实际上是字典类和基础表以及令牌类和表之间的连接。

字段编码系统是我字典课上的一个字段。我想我应该使用别名,但在目前的情况下,我不知道该怎么做。任何帮助都将不胜感激。

艾略特

共有1个答案

齐英朗
2023-03-14

这是一个新手问题。Hibernate要求反映表的模型的getter和setter具有特定的格式。getter必须是获取基础表中name是字段名的位置。setter必须设置为基础表的name是字段名的位置。是的,Name的第一个字母必须大写。

 类似资料:
  • 帮助我解决我的问题...当我使用方法时,我在映射方面遇到了问题。 型号:Bus Bus\U id pk号 驱动程序driver_idpk名称 巴士司机bus_idfkdriver_idfk 巴士 驾驶员 1级-驾驶员: 2类-总线公共类BusDAOImpl实现BusDAO{ 我的映射: 主类: } hibernate.cfg 工厂 HibernateUtil: 错误文本:

  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • 问题内容: 我的Java模型上有一个枚举类型,我想映射到数据库中的表。我正在使用“hibernate注释”,但我不知道该怎么做。由于我搜索的答案比较旧,我想知道哪种方法最好? 提前致谢 问题答案: 除了注释,您还需要其他东西吗?例如,以下枚举: 可以这样使用和注释: 您可以使用批注的enum属性指定枚举应如何在数据库中持久化。指定该枚举将作为整数值保留。在这里,设置为将永久保存为0,保留为1,依此

  • 我不是JPA/Hibernate方面的专家,我真的不知道我试图实现的是不可能实现的还是我做错了,既然我预计是后者,这里就什么也不做了。 我有一个map ,我正试图将其持久化到一个表中,并遵循了这里描述的示例:使用JPA存储map 但随后我得到一个HibernateException:列值的STATE_MAP中的列类型错误。找到:bigint,应为:char(255) 当我将bigint更改为cha

  • 我对这些技术是新的,所以提前道歉。 我在我的应用程序中使用了springboot、Spring JPA、hibernate和mapstruct。

  • 问题内容: 我正在使用Hibernate 3.3和PostgreSQL 8.x,并希望使用Hibernate批注来映射不是主键的自动增量列。 只要该列是由数据库而不是由Hibernate自动递增的,则在Postgres中使用SERIAL类型或序列映射该列都没有关系。我尝试了以下映射,但它们始终生成空的orderId。 我将不胜感激。 谢谢 问题答案: 以下映射应该可以正常工作: 但是请注意,刷新会