2012-05-30 6 views
1

현재 응용 프로그램 사용자를 관리하는 데 도움이되는 유틸리티 프로젝트에서 작업하고 있습니다 (사용자에게 하나 이상의 역할이 있고 역할에 하나 이상의 권한이 있음) . 나 최대 절전 모드에 새로운 오전, 나는 나는 다음과 같은 문제가 발생한 이유를 알고하지 않습니다명명 된 쿼리 (QuerySyntaxException : 예기치 않은 토큰)에 오류가 발생했습니다.

ERROR [hibernate.internal.SessionFactoryImpl] HHH000177: Error in named query: right.findAllByRoleId 
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: right near line 1, column 8 [select right from com.google.code.jee.utils.user.management.model.Role as r left join r.rights as right where r.id = :roleId] 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) 
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:276) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:106) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:81) 
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167) 
    at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:1130) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:523) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1740) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1778) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:189) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:350) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:335) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:848) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:790) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at Demo.main(Demo.java:9) 

오른쪽 클래스 :

@Entity 
@Table(name = "RIG_RIGHT") 
@NamedQueries({ 
    @NamedQuery(name = RightDao.COUNT_BY_NAME, query = "select count(*) from Right as rig where rig.name = :name"), 
    @NamedQuery(name = RightDao.FIND_BY_NAME, query = "from Right as rig where rig.name = :name"), 
    @NamedQuery(name = RightDao.COUNT_FOR_ROLE_ID, query = "select count(*) from Role as r where r.id = :id"), 
    @NamedQuery(name = RightDao.FIND_ALL_BY_ROLE_ID, query = "select right from Role as r left join r.rights as right where r.id = :roleId"), 
    @NamedQuery(name = RightDao.COUNT_FOR_ROLE_ID_AND_NAME, query = "select count(*) from Role as r left join r.rights as right where r.id = :roleId and right.name = :rightName"), 
    @NamedQuery(name = RightDao.FIND_BY_ROLE_ID_AND_NAME, query = "select right from Role as r left join r.rights as right where r.id = :roleId and right.name = :rightName") }) 
@SuppressWarnings("serial") 
public class Right extends AbstractHibernateDto<Integer> { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "RIG_ID", nullable = false) 
    private Integer id; 

    @Column(name = "RIG_NAME", nullable = false, unique = true, length = 50) 
    private String name; 

     // Getters & Setters 

역할 클래스 :

@Entity 
@Table(name = "ROL_ROLE") 
@NamedQueries({ 
    @NamedQuery(name = RoleDao.COUNT_BY_NAME, query = "select count(*) from Role as r where r.name = :name"), 
    @NamedQuery(name = RoleDao.FIND_BY_NAME, query = "from Role as r where r.name = :name"), 
    @NamedQuery(name = RoleDao.COUNT_FOR_USER_ID, query = "select count(*) from User as u where u.id = :id"), 
    @NamedQuery(name = RoleDao.FIND_ALL_BY_USER_ID, query = "select role from User as u left join u.roles as role where u.id = :userId"), 
    @NamedQuery(name = RoleDao.COUNT_FOR_USER_ID_AND_NAME, query = "select count(*) from User as u left join u.roles as role where u.id = :userId and role.name = :roleName"), 
    @NamedQuery(name = RoleDao.FIND_BY_USER_ID_AND_NAME, query = "select role from User as u left join u.roles as role where u.id = :userId and role.name = :roleName") }) 
@SuppressWarnings("serial") 
public class Role extends AbstractHibernateDto<Integer> { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "ROL_ID", nullable = false) 
    private Integer id; 

    @Column(name = "ROL_NAME", nullable = false, unique = true, length = 50) 
    private String name; 

    @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY) 
    @JoinColumn(name = "RIG_ROLE_ID", nullable = false) 
    private List<Right> rights; 

    // Getters & Setters 

오른쪽 DAO를 :

public interface RightDao extends GenericDao<Integer, Right> { 

    public final String COUNT_BY_NAME = "right.countByName"; 
    public final String FIND_BY_NAME = "right.findByName"; 
    public final String COUNT_FOR_ROLE_ID = "right.countForRoleId"; 
    public final String FIND_ALL_BY_ROLE_ID = "right.findAllByRoleId"; 
    public final String COUNT_FOR_ROLE_ID_AND_NAME = "right.countForRoleIdAndName"; 
    public final String FIND_BY_ROLE_ID_AND_NAME = "right.findByRoleIdAndName"; 

    /** 
    * Search the number of elements with the 'name' parameter. 
    * 
    * @param name the name 
    * @return the number of element found 
    */ 
    public Integer countByName(String name); 

    /** 
    * Search an element by its name. 
    * 
    * @param name the name 
    * @return the right 
    */ 
    public Right findByName(String name); 

    /** 
    * Count the number of rights of a specific role 
    * 
    * @param roleId the role id 
    * @return the number of rights 
    */ 
    public Integer countForRoleId(Integer roleId); 

    /** 
    * Finds all rights by roleId. 
    * 
    * @param roleId the role primary key 
    * @return the list 
    */ 
    public List<Right> findAllByRoleId(Integer roleId); 

    /** 
    * Count the number of rights with a specific name and corresponding to 
    * a specific role 
    * 
    * @param roleId the roleId 
    * @param rightName the right name 
    * @return the number of rights 
    */ 
    public Integer countForRoleIdAndName(Integer roleId, String rightName); 

    /** 
    * Finds the right. 
    * 
    * @param roleId the role primary key 
    * @param rightName the right name 
    * @return the right 
    */ 
    public Right findByRoleIdAndName(Integer roleId, String rightName); 

} 

역할 DAO :

public interface RoleDao extends GenericDao<Integer, Role> { 

    public final String COUNT_BY_NAME = "role.countByName"; 
    public final String FIND_BY_NAME = "role.findByName"; 
    public final String COUNT_FOR_USER_ID = "role.countForUserId"; 
    public final String FIND_ALL_BY_USER_ID = "role.findAllByUserId"; 
    public final String COUNT_FOR_USER_ID_AND_NAME = "role.countForUserIdAndName"; 
    public final String FIND_BY_USER_ID_AND_NAME = "role.findByUserIdAndName"; 

    /** 
    * Search the number of elements with the 'name' parameter. 
    * 
    * @param name the name 
    * @return the number of element found 
    */ 
    public Integer countByName(String name); 

    /** 
    * Search an element by its name. 
    * 
    * @param name the name 
    * @return the user 
    */ 
    public Role findByName(String name); 

    /** 
    * Count the number of roles of a specific user 
    * 
    * @param userId the user id 
    * @return the number of roles 
    */ 
    public Integer countForUserId(Integer userId); 

    /** 
    * Finds all roles by user id. 
    * 
    * @param userId the user primary key 
    * @return the list 
    */ 
    public List<Role> findAllByUserId(Integer userId); 

    /** 
    * Count the number of roles with a specific name and corresponding to 
    * a specific user 
    * 
    * @param userId the userId 
    * @param roleName the role name 
    * @return the number of roles 
    */ 
    public Integer countForUserIdAndName(Integer userId, String roleName); 

    /** 
    * Finds the role. 
    * 
    * @param userId the user primary key 
    * @param roleName the role name 
    * @return the role 
    */ 
    public Role findByUserIdAndName(Integer userId, String roleName); 

} 

아이디어가 있으십니까? 미리 감사드립니다.
줄리앙 Neuhart

+0

오른쪽의 다른 단어 사용 시도 – Reddy

답변

4

그것은 당신의 명명 된 질의 중 하나의 변수 이름으로 right을 사용하고 오류의 원인처럼 보인다 (RightDao.FIND_ALL_BY_ROLE_ID, RightDao.FIND_BY_ROLE_ID_AND_NAME). right은 HQL에서 예약 된 단어 (right outer join)

다음 중 하나를 right에 대한

  1. 를 사용하여 다른 별명 :

    @NamedQuery(name = RightDao.FIND_ALL_BY_ROLE_ID, query = "select r from Role as role left join role.rights as r where role.id = :roleId"), @NamedQuery(name = RightDao.FIND_BY_ROLE_ID_AND_NAME, query = "select r from Role as role left join role.rights as r where role.id = :roleId and r.name = :rightName") })

  2. 의 요청에 의한에 예약어 right 탈출 대괄호 [right] 또는 백틱으로 둘러 쌉니다. 또한 다음과 같은 유용한 질문을 유용하게 사용할 수 있습니다 : How to escape reserved words in Hibernate's HQL.

+0

글쎄, 나는 '권리'가 HQL의 예약어라는 것을 몰랐다! 고맙습니다 ! –

+0

도움이 된 것을 기쁘게 생각합니다 :) –