Не удалось устранить ошибку свойства при выборе из таблицы ассоциации - PullRequest
1 голос
/ 28 мая 2019

Я пытаюсь сделать выбор из таблицы ассоциаций (из двух таблиц, имеющих отношение ко многим). Вот мои сущности:

Вопрос:

@Entity
@Table(name = "question")
public class Question {

@Id
private int id;

@Column(name = "question_text")
private String text;

@Column(name = "chapter_id")
private int chapterId;

  @ManyToMany(mappedBy = "questions")
  @Transient
  public Set<Assessment> assessments = new HashSet<Assessment>();

public Question(int id, String text, int chapterId) {

    this.id = id;
    this.text = text;
    this.chapterId =chapterId;
}
//getters setters

Оценка: * * 1006

@Entity
@Table(name = "assessment")
@Access(AccessType.FIELD)
public class Assessment {


@Id
private int id;
private String name;

@Column(name = "chapter_id")
private int chapterId;
private int grade;
private String type;

 @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
        name = "assessment_question", 
        joinColumns = { @JoinColumn(name = "assessment_id") }, 
        inverseJoinColumns = { @JoinColumn(name = "question_id") }
    )
    @Transient
    @ElementCollection(targetClass=Question.class)
    Set<Question> questions = new HashSet<Question>();

public Assessment(int id, String name, int chapterId, int grade, String type) {
    super();
    this.id = id;
    this.name = name;
    this.chapterId = chapterId;
    this.grade=grade;
    this.type=type;
}
//getters & setters 

В схеме MySQL эти 2 сущности имеют таблицу ассоциаций оценивания_qution, имеющую в качестве ключей assessment_id и question_id.

Я пытаюсь прочитать записи из этой таблицы. Это метод DAO:

@Transactional
    public List<Question> getQuestionsOfAssessment(int id) {

        List<Question> list = null;

        Configuration con = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Question.class);

        SessionFactory sf = con.buildSessionFactory();
        Session session = sf.openSession();
        Transaction tx = session.beginTransaction();
        try{

            TypedQuery<Question> query=sf.openSession().createQuery("select q from Question q join q.assessments a where a.id = :id"); 
                    query.setParameter("id",id);

            list = query.getResultList();

            tx.commit();  
            session.close();
            }catch(Exception e){
                e.printStackTrace();
            }

        return list;
        }

Однако я получаю следующее исключение:

java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: assessments of: models.Question [select q from models.Question q join q.assessments a where a.id = :id]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:133)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:164)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:713)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:103)
at dao.AssessmentQuestionDAO.getQuestionsOfAssessment(AssessmentQuestionDAO.java:60)
at webapp.Main.main(Main.java:156)

Я много читал здесь о том, как использовать много ко многим и как решить это, но пока ничего не могло решить. Похоже, мне не хватает какой-то очень незначительной вещи, которую я, вероятно, не вижу. У вас есть идеи, как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...