2015-03-17 2 views
0

Я совершенно новый в Hibernate и в JPQL запросах, и у меня есть некоторые проблемы с попыткой задействовать следующий запрос. Ситуация заключается в следующем, у меня есть:Почему этот запрос Hibernate JPQL не может работать?

1) Класс сущностей с именем KMCountryArea что карта таблицу KM_COUNTRY_AREA на моей базе данных:

@NamedQueries({ 
     //@NamedQuery(name = "kmCountryListByName", query = "SELECT c FROM KMCountryArea c WHERE c.nomeFolder = :nomeFolder order by c.idCountryArea") 
     @NamedQuery(name = "kmCountryListByName", query = "SELECT c FROM KMCountryArea c WHERE c.nomeFolder = :nomeFolder order by c.idCountryArea") 
}) 

/*@NamedQuery(name = "kmCountryListByName", query = "SELECT country FROM KMCountryArea country WHERE country.nomeFolder = :nomeFolder order by country.idCountry")*/ 

@Entity 
@Table(name = "KM_COUNTRY_AREA") 
public class KMCountryArea implements Serializable { 

    @Id 
    @GeneratedValue 
    private Long idCountryArea; 

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

    //@Column(name = "country") 
    //@OneToOne(mappedBy = "country", cascade = CascadeType.ALL) 
    @OneToOne 
    private KMCountry country; 

    public Long getIdCountryArea() { 
     return idCountryArea; 
    } 

    public void setIdCountryArea(Long idCountryArea) { 
     this.idCountryArea = idCountryArea; 
    } 

    public String getNomeFolder() { 
     return nomeFolder; 
    } 

    public void setNomeFolder(String nomeFolder) { 
     this.nomeFolder = nomeFolder; 
    } 

    public KMCountry getCountry() { 
     return country; 
    } 

    public void setCountry(KMCountry country) { 
     this.country = country; 
    } 
} 

Как вы можете видеть, этот класс и связанный с ним таблица имеет только три поля:

  • строка ID:

    @Id 
    @GeneratedValue 
    private Long idCountryArea; 
    
  • nomeFolder Строка, которая совпадает с nomeFolder колонке таблицы:

    @Column(name = "nomeFolder") 
    private String nomeFolder; 
    
  • KMCountry страна, которые представляют один на один отношения с другим KMCountry в класс сущности, определенный в моем проекте, который сам определил это поле как id private Long idC ountry;

    @OneToOne 
    private KMCountry country; 
    

Infact этот класс сущностей Hibernate правильно генерировать таблицу KM_COUNTRY в моей базе данных, то это будет KM_COUNTRY поля таблицы, которые я вижу в БД:

COLUMN NAME   DATA_TYPE   NULLABLE DATA_DEFAULT COLUMN_ID 
-------------------------------------------------------------------------------- 
IDCOUNTRYAREA  NUMBER(19,0)   No   (null)    1  
NOMEFOLDER   VARCHAR2(255 CHAR) Yes   (null)    2  
COUNTRY_IDCOUNTRY NUMBER(19,0)   Yes   (null)    3  

I думаю, что это правильно, потому что мне кажется, что три поля, определенные в классе сущностей класса KMCountryArea, верны отображаемый в таблице KM_COUNTRY.

Так я вручную вставить строку внутри KM_COUNTRY таблицы (с помощью запроса вставки, и выполнение этого простого запроса на выборку (внутри Oracle SQL Developer, которое СУБД IDE):

select * from KM_COUNTRY_AREA where nomefolder = 'BRAZIL'; 

I получить следующий правильный результат:

IDCOUNTRYAREA  NOMEFOLDER  COUNTRY_IDCOUNTRY 
------------------------------------------------------------ 
    2     BRAZIL    715 

Теперь я должен сделать что-то вроде этого запроса с использованием JPQL, но вместо того, чтобы получить набор строк (в предыдущем случае, только один, но я могу получить больше строк) Я хочу получить список объект KMCountry, имеющий определенный идентификатор (внутри объекта), равен значению COUNTRY_IDCOUNTRY.

Итак, как вы можете видеть, я реализовал эту JPQL именованный запрос:

@NamedQuery(name = "kmCountryListByName", query = "SELECT c FROM KMCountryArea c WHERE c.nomeFolder = :nomeFolder order by c.idCountryArea") 

Тогда, в моем проекте, я определяемый службу DAO, что выполнение предыдущего запроса, реализации этого конкретного класса:

@Repository("kmCountryAreaService") 
@Transactional(propagation = Propagation.NOT_SUPPORTED) 
public class KMCountryAreaServiceImpl extends AbstractService implements KMCountryAreaService { 

    public List<KMCountry> getCountryListByName(String folderName){ 
     List<KMCountry> list = getHibernateTemplate().findByNamedQuery("kmCountryListByName"); 
     return list; 
    } 

} 

как вы можете видеть, что это определяемом как хранилище Spring и реализует интерфейсKMCountryAreaService в Wich я просто перечислить CRUD implmented мето d (на данном этапе работ существуют только getCountryListByName())

Ok, то в моем коде (в классе действия) я выполнить эту операцию:

List<KMCountry> kmCountryListAssociated = kmCountryAreaService.getCountryListByName("BRAZIL", folderName); 

Так я ожидаю, чтобы получить список из KMCountry объекта, который в таблицы KM_COUNTRY имеет NOMEFOLDER значение поля равно БРАЗИЛИИ.

Но это не работает, Infact, с помощью отладчика, я вижу, что исполнение идет в getCountryListByName() метода, но когда это пытается выполнить даное:

List<KMCountry> list = getHibernateTemplate().findByNamedQuery("kmCountryListByName"); 

исключение составляет (но его сообщение не напечатано в стеке).

Что мне не хватает? Как я могу попытаться решить эту проблему? Я схожу с ума, пытаясь понять, что не так.

Тпх

РЕДАКТИРОВАТЬ-1:

Я изменил getCountryListByName() метод для отслеживания excpetion, теперь мой метод:

public List<KMCountry> getCountryListByName(String nomeFolder) { 

    List<KMCountry> list = null; 

    try{ 
     list = getHibernateTemplate().findByNamedQuery("kmCountryListByName", nomeFolder); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    return list; 
} 

и полученный excpetion это:

java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based! 
    at org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:55) 
    at org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:61) 
    at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:397) 
    at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:369) 
    at org.springframework.orm.hibernate3.HibernateTemplate$33.doInHibernate(HibernateTemplate.java:985) 
    at org.springframework.orm.hibernate3.HibernateTemplate$33.doInHibernate(HibernateTemplate.java:1) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
    at org.springframework.orm.hibernate3.HibernateTemplate.findByNamedQuery(HibernateTemplate.java:979) 
    at org.springframework.orm.hibernate3.HibernateTemplate.findByNamedQuery(HibernateTemplate.java:975) 
    at egp.prc.km.services.KMCountryAreaServiceImpl.getCountryListByName(KMCountryAreaServiceImpl.java:34) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    at $Proxy377.getCountryListByName(Unknown Source) 
    at egp.prc.km.actions.countryArea.CountryAreaAction.showMultiSelectCountry(CountryAreaAction.java:205) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254) 
    at egp.prc.km.utils.interceptors.LiferayAjaxInterceptor.intercept(LiferayAjaxInterceptor.java:28) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) 
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498) 
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    at org.apache.struts2.dispatcher.ng.servlet.StrutsServlet.service(StrutsServlet.java:76) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300) 
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) 
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) 
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:178) 

ответ

3

Вы не пропустите folderName в запрос. Попробуйте

List<KMCountry> list = getHibernateTemplate().findByNamedQueryAndNamedParam("kmCountryListByName", "nomeFolder", folderName); 
+0

Я tryied, чтобы сделать, как вы предлагаете, но, кажется, что я получить броски java.lang.Exception – AndreaNobili

+1

Вы можете разместить исключение? –

+0

Проблема заключается в том, что сообщение об исключении не печатается в стеке, и я не могу понять, почему – AndreaNobili

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