com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列位于';字段列表';使用标准和映射注释

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列位于';字段列表';使用标准和映射注释,mysql,hibernate-mapping,hibernate-criteria,Mysql,Hibernate Mapping,Hibernate Criteria,我有访问结果的标准 第一个Hibernate Dao是 AnswerText answersText = questionManager.getAnswerTextByAnswerIdAndLanguageId(answers.getAnswerId(), 1L); @Override public AnswerText getAnswerTextByAnswerIdAndLanguageId(Number answerId,Number languageId) { C

我有访问结果的标准

第一个Hibernate Dao是

AnswerText answersText = questionManager.getAnswerTextByAnswerIdAndLanguageId(answers.getAnswerId(), 1L);

@Override
    public AnswerText getAnswerTextByAnswerIdAndLanguageId(Number answerId,Number languageId) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(AnswerText.class);
        criteria.add(Restrictions.eq("answer.answerId", answerId));
        criteria.add(Restrictions.eq("languageId", languageId));
        List<AnswerText> results = criteria.list();
        return (results !=null && !results.isEmpty()? results.get(0): null);
    }




Answers.java

@Entity  
@Table(name = "ANSWERS")
@Cacheable

@JsonIgnoreProperties(ignoreUnknown = true)
public class Answer {

    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ANSWER_ID")  
    private Long  answerId;

    @Column(name = "QUESTION_ID")  
    private Long      questionId;

    @Column(name = "DATE_CREATED")  
    private Timestamp   dateCreated;

    @Column(name = "CREATED_BY_ID")  
    private Long      creatorId;

    @Column(name = "DATE_MODIFIED")  
    private Timestamp   dateModified;

    @Column(name = "MODIFIED_BY_ID")  
    private Long    modifierId;

    @OneToMany(fetch = FetchType.EAGER,mappedBy = "answer" )
    private Set<AnswerText> answerText = new HashSet<AnswerText>();

            //getters and setters


AnswerText.java

@Entity  
@Table(name = "ANSWERTEXT")
@Cacheable

@JsonIgnoreProperties(ignoreUnknown = true)
public class AnswerText {

    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ANSWER_TEXT_ID")  
    private Long answerTextId;

    @ManyToOne
    @JoinColumn(name="answerId", insertable=false, updatable=false, 
                nullable=false)
    private Answer answer;

    @Column(name = "ANSWER_TEXT")  
    private String answerText;

    @Column(name = "LANGUAGE_ID")  
    private Long languageId;

            //getters and setters
然后我换成了下面的

AnswerText.java

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ANSWER_ID", nullable = false) 
    private Answer answer;
Answers.java

@OneToMany(fetch = FetchType.EAGER,mappedBy = "answer" )
    @Fetch(FetchMode.JOIN)
    private Set<AnswerText> answerText = new HashSet<AnswerText>();
@OneToMany(fetch=FetchType.EAGER,mappedBy=“answer”)
@Fetch(FetchMode.JOIN)
私有集answerText=新HashSet();
这不会产生错误,但会在调用时获取两次结果

第二个HibernateDao调用是

List<Answer> answerList = questionManager.getAnswersByQuestionId(Long.parseLong("2"));
            System.out.println("answerList :"+answerList1.size());

    @Override
public ArrayList<Answer> getAnswersByQuestionId(Number questionId) {
    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Answer.class);
    criteria.add(Restrictions.eq("questionId", questionId));
    ArrayList<Answer> answerList = (ArrayList) criteria.list();
    return answerList;
}
List-answerList=questionManager.getAnswersByQuestionId(Long.parseLong(“2”);
System.out.println(“answerList:+answerList1.size());
@凌驾
公共阵列列表getAnswersByQuestionId(编号questionId){
Criteria=sessionFactory.getCurrentSession().createCriteria(Answer.class);
标准。添加(限制。情商(“问题ID”,问题ID));
ArrayList answerList=(ArrayList)criteria.list();
返回应答列表;
}

谁能告诉我这里出了什么问题吗。请帮帮我。

更改列名做得很好

在我看来,你的多重结果必然会:

FetchType.EAGER

fetchmodejoin如前所述,您将不得不担心重复 结果。另一方面,JOIN创建的查询量最少。 在高延迟环境中,单个连接可能是相当可观的 比多次选择更快。请记住,连接太多数据 可能会给数据库带来压力。 从

使用FetchMode。选择您将得到您想要的结果

List<Answer> answerList = questionManager.getAnswersByQuestionId(Long.parseLong("2"));
            System.out.println("answerList :"+answerList1.size());

    @Override
public ArrayList<Answer> getAnswersByQuestionId(Number questionId) {
    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Answer.class);
    criteria.add(Restrictions.eq("questionId", questionId));
    ArrayList<Answer> answerList = (ArrayList) criteria.list();
    return answerList;
}