2015-04-14 5 views
1

им пытаются запустить HQL запрос, который дает мне ошибку говоря:Как написать запрос на соединение в HQL?

org.hibernate.QueryException: could not resolve property: 
UserType of: EntityPack.UserTypeMenu 
[from EntityPack.UserTypeMenu as utm ,EntityPack.UserType as ut 
where utm.UserType.userTypeId=ut.userTypeId and ut.userTypeDesc like ' %ad%' ] 

это функция, где я пишу запрос:



    public ObservableList PostTableusertypemenu(String search, int q) { 
      ObservableList data; 
      data = FXCollections.observableArrayList(); 
      List ll=null; 
       ll = pop.UrviewTable("from UserTypeMenu as utm ,UserType as ut "+ 
             "where utm.UserType.userTypeId=ut.userTypeId"+ 
            " and ut.userTypeDesc like ' %"+ search +"%' "); 
      Iterator ite = ll.iterator(); 
      while (ite.hasNext()) { 
       UserTypeMenu obj = (UserTypeMenu) ite.next(); 
       data.add(obj); 
      } 
      return data; 
     } 

мой UserType объект класса:


    @Entity 
    @Table(name = "user_type") 
    public class UserType { 
      @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Basic(optional = false) 
     @Column(name = "User_Type_Id") 
     private Integer userTypeId; 
     @Basic(optional = false) 
     @Column(name = "User_Type") 
     private String userType; 
     @Basic(optional = false) 
     @Column(name = "User_Type_Desc") 
     private String userTypeDesc; 
     @Basic(optional = false) 
     @Column(name = "Status") 
     private String status; 
      @Basic(optional = false) 
     @Column(name = "Markers") 
     private String markers; 
    } 

UserTypeMenu Класс сущности:



    @Entity 
    @Table(name = "user_type_menu") 
    @NamedQueries({ 
     @NamedQuery(name = "UserTypeMenu.findAll", query = "SELECT u FROM UserTypeMenu u")}) 
    public class UserTypeMenu implements Serializable { 
     private static final long serialVersionUID = 1L; 
     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Basic(optional = false) 
     @Column(name = "User_Type_Menu_Id") 
     private Integer userTypeMenuId; 
     @Basic(optional = false) 
     @Column(name = "Status") 
     private String status; 
     @Basic(optional = false) 
     @Column(name = "Markers") 
     private String markers; 
     @ManyToOne(optional = false) 
     private UserType userType; 
     @ManyToOne(optional = false) 
     private UserMenuMaster userMenuMaster; 
     @ManyToOne(optional = false) 
     private UserMenuBar userMenuBar; 
    } 

Я хочу получить данные из UsertypeMenu на основе описания Usertype.

пожалуйста, помогите мне .. спасибо. :)

ответ

1

Вы не записываете объединения в HQL, как в SQL, вы используете нотацию . для перемещения по графу объектов. Попробуйте это

"from UserTypeMenu as utm where utm.userType.userTypeDesc like ' %"+ search +"%' " 

На самом деле вы можете использовать объединения, но непосредственно на ассоциациях. Вот тот же запрос, но с использованием присоединиться синтаксис

"from UserTypeMenu as utm join utm.userType ut where ut.userTypeDesc like ' %"+ search +"%' " 

Преимущество использования включается в том, что вы можете указать, например, left join если отношение не является обязательным, и вы не хотите потерять никаких результатов из-за inner join, который неявно используется, когда вы используете ..

+0

вы можете предложить мне любой сайт, который поможет мне узнать подробнее о hql в деталях. ?? :) –

+0

Конечно, лучшим местом для этого является [Hibernate documentation] (https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/queryhql.html). Конечно, поскольку HQL является расширением JPQL, вы также можете проверить [документацию JPQL] (http://docs.oracle.com/cd/E15523_01/apirefs.1111/e13946/ejb3_langref.html). –

+0

это givimg me java.lang.ClassCastException: [Ljava.lang.Object; не может быть передан в EntityPack.UserTypeMenu эта ошибка. at UserTypeMenu obj = (UserTypeMenu) ite.next(); data.add (obj); –

Смежные вопросы