@OneToMany отношение спящий - PullRequest
       1

@OneToMany отношение спящий

0 голосов
/ 06 сентября 2018

Привет всем, у меня есть объекты:

Ребенок: @EDIT благодаря @ MithatKonuk

@Entity
@Table(name="child")
public class Child {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="ID")
    private int id;

    @Column(name="FirstName")
    private String firstName;

    @Column(name="SecondName")
    private String secondName;

    @Column(name="PESEL")
    private String PESEL;

    @Column(name="Sex")
    private String sex;

  @JsonBackReference
  @ManyToOne(cascade = CascadeType.ALL)
  @JoinColumn(name="familyid",referencedColumnName = "id")
  private Family family;

И Семья: @EDIT благодаря @ MithatKonuk

@Entity
@Table(name="family")
public class Family {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;



    @OneToOne(cascade = CascadeType.ALL)
    private Father father;

    @JsonManagedReference
    @OneToMany(mappedBy = "family",fetch=FetchType.EAGER,cascade = CascadeType.ALL)
    private List<Child> childList;

И я хочу получить список детей, которые будут частью семьи.Я попытался сделать запрос: @EDIT благодаря @ MithatKonuk

@Transactional
public List<Child> findAllChild(int id) {
    // TODO Auto-generated method stub
    HibernateUtil.initManager();
    HibernateUtil.getEntityManager().clear();
    Query query = HibernateUtil.getEntityManager().createQuery("SELECT child FROM Child child FETCH JOIN child.family u WHERE u.id = :userId ");
    query.setParameter("userId",id);
    List<Child> result = query.getResultList();
    HibernateUtil.shutdown();
    return result;
}

И когда я пытаюсь запустить его, я всегда получаю сообщение об ошибке:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting "all", found 'JOIN' near line 1, column 64 [SELECT child FROM com.example.Family3.domain.Child child FETCH JOIN child.family u WHERE u.id = :userId ]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:296) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:188) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:119) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:595) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:704) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
    ... 9 common frames omitted

Мне нужна ваша помощь.

@ Edit Хорошо, поэтому я обновил этот код до полных сущностей.Тебе нужно еще?Мне очень жаль, может быть, это легко, но я изучаю спящий режим, и я не знаю, что не так в этом.Спасибо за ответ.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

JOIN должен быть до FETCH, попробуйте этот запрос:

"SELECT child FROM Child child JOIN FETCH child.family WHERE child.family.id = :userId"
0 голосов
/ 06 сентября 2018

Сначала вам нужно изменить ваш запрос

@Transactional
public List<Child> findAllChild(int id) {
    // TODO Auto-generated method stub
    HibernateUtil.initManager();
    HibernateUtil.getEntityManager().clear();
    Query query = HibernateUtil.getEntityManager().createQuery("SELECT child FROM Child child JOIN FETCH child.family  WHERE child.family.id = :userId ");
    query.setParameter("userId",id);
    List<Child> result = query.getResultList();
    HibernateUtil.shutdown();
    return result;
}

Во-вторых, добавьте @Entity и @Table ("child") и @Table ("family") для каждого класса, как показано ниже

@Entity
@Table("child table name")
public class Child{}

@Entity
@Table("family table name")
public class Family{}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...