Как использовать Join в программе Java с Hibernate? - PullRequest
0 голосов
/ 11 июня 2018

Я получил Запрос на выборку данных из двух таблиц вместе

Я пытаюсь использовать его в программе Java, которая работает с Hibernate3.Когда я пытаюсь получить данные, я получаю исключение.Мой полный код находится в Вопрос в Coderanch, 1-й ответ содержит полные файлы java, xml. .

Вот мой запрос, который я использовал в java программе

String selectQuery = "select student.roll_no, student.name, exam_dates.subject, exam_dates.date "
    + "from student student "
    + "JOIN exam_dates exam_dates on exam_dates.roll_no = student.roll_no";

и еще один для испытания

  String selectQuery = "select student.roll_no, student.name, exam_dates.subject, exam_dates.date "
            + "from student student "
            + "INNER JOIN exam_dates exam_dates on exam_dates.roll_no = student.roll_no";

Используя его, я получаю исключение следующим образом: -

14:19:07,752  INFO MemoryContextFactory:34 - Creating EJB3Unit initial JNDI context
org.hibernate.QueryException: outer or full join must be followed by path expression [select student.roll_no, student.name, exam_dates.subject, exam_dates.date from student student INNER JOIN exam_dates exam_dates on exam_dates.roll_no = student.roll_no]
at org.hibernate.hql.classic.FromParser.token(FromParser.java:170)
at org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:86)
at org.hibernate.hql.classic.PreprocessingParser.token(PreprocessingParser.java:108)
at org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:28)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:216)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:185)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at test_db.get_table_by_join(test_db.java:99)
at test_db$1.run(test_db.java:40)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 11 июня 2018

Создайте свой класс сущности как

@Entity
public class Student{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long rollNo;
    private String name;
    @OneToMany
    private ExamDates examDates;

    public void setRollNo(Long rollNo) {
        this.rollNo = rollNo;
    }

    public void getRollNo() {
        return this.rollNo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getExamDates() {
        return this.examDates;
    }

    public void setExamDates(ExamDates examDates) {
        this.examDates = examDates;
    }
}

, где ExamDates - это еще одно сопоставление классов с вашей таблицей exam_dates.Когда вы позвоните по номеру

Student s = entityManager.find(Student.class, rollNo); 

, он даст вам объект студента, а затем вызовет s.getExamDates, который даст вам даты экзамена

...