2013-12-04 3 views
1

Я изучаю Struts2 и Hibernate ...Struts 2 Hibernate

У меня есть класс клиента с кодом географии, связанным с каждым экземпляром. Когда я показываю на своем JSP, мне нужно разбить каждого персонажа ярлыком.

String geoCode = "1324567890"; 

должен стать

List<String> geoCodeList = "[1][2][3]..." 

так, что я могу использовать подмножество в JSP.

Что я пытался сделать, это добавить еще один атрибут для объекта Customer.java. У меня есть следующий:

private String geoCode; 
private List<String> geoCodeList; 

@Column(name = "GEO_CD") 
public String getGeoCd() { 
    return geoCd; 
} 

public void setGeoCd(String geoCd) { 
    this.geoCd = geoCd; 

    geoCdList = new ArrayList<String>(); 

    System.out.println("geo length = " + geoCd.length()); 
    for (int i=0; i < geoCd.length(); i++) { 
     geoCdList.add(geoCd.substring(i,i+1));   
    } 
} 

Это все работает нормально, но как только я добавить геттер для geoCdList я получаю сообщение об ошибке.

public List<String> getGeoCdList() { 
    return geoCdList; 
} 

Ошибка:

Initial SessionFactory creation failed.org.hibernate.MappingException: Could not determine  type for: java.util.List, at table: Customer, for columns: [org.hibernate.mapping.Column(geoCdList)] 
    Dec 03, 2013 10:21:26 PM org.apache.catalina.core.StandardWrapperValve invoke 
    SEVERE: Servlet.service() for servlet [default] in context with path [/msps-web] threw exception [Filter execution threw an exception] with root cause 
    org.hibernate.MappingException: Could not determine type for: java.util.List, at table: Customer, for columns: [org.hibernate.mapping.Column(geoCdList)] 
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:306) 
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:290) 
at org.hibernate.mapping.Property.isValid(Property.java:243) 
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:464) 
at org.hibernate.mapping.RootClass.validate(RootClass.java:235) 
at org.hibernate.cfg.Configuration.validate(Configuration.java:1362) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865) 
at com.att.msps.database.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:13) 
at com.att.msps.database.util.HibernateUtil.<clinit>(HibernateUtil.java:8) 
at com.att.msps.customer.view.CustomerAction.<init>(CustomerAction.java:28) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
at java.lang.Class.newInstance(Class.java:374) 
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:131) 
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:162) 
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:151) 
at com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:121) 
at com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:297) 
at com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:397) 
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194) 
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) 
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) 
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) 
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553) 
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:724) 

Я думаю, что он думает, что это столбец таблицы, но я не совсем уверен. Любая помощь будет оценена по достоинству.

Спасибо !!!!!

ответ

0

Не добавляйте аннотации для geoCdList.

+0

У меня нет аннотации. Имеет ли место значение? – Memo

1

Если вы хотите сохранить geoCodeList в базу данных, вам нужно использовать @ElementCollection аннотация, чтобы нанести на карту его как коллекцию строк.

@ElementCollection 
private List<String> geoCodeList; 

Но если вы не хотите, чтобы сохраняться в свой список, то вам необходимо переместить логику создания списка из методов установки в какой-то другой метод и аннотирования этот метод с @Transient аннотацию.

1

Не рекомендуется хранить список в объекте &, не сопоставляйте его в базе данных.

В любом случае вы можете использовать аннотацию @Transient на этом поле &, это не будет сохраняться.

+0

Если это поле не сохраняется в db, тогда логика в сеттере не имеет смысла. –

+0

@AleksandrM вот что я вывел из вопроса. Он не хочет упорствовать, просто используйте его для просмотра. –

+0

Может быть. НО логика внутри сеттера имеет смысл только в том случае, если этот список сохраняется. –

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