Como utilizar especialização entre classes no VRaptor?

Fiz um mapeamento one-to-one, utilizando (Hibernate) a estratégia de herança/especialização (por ex.: Test, RangeTest, StepTest).

@Entity
@Table(name = "teste")
@Inheritance(strategy=InheritanceType.JOINED)
public class Test  {

    private Integer cdTeste;
    //Outras propriedades

    //Getters & Setters
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="teste_seq") 
    @Column(name = "cd_teste")
    public Integer getCdTeste() {
        return cdTeste;
    }
@Entity
@Table(name = "teste_range")
@PrimaryKeyJoinColumn(name = "cd_teste_range")
public class RangeTest extends Test {

    private BigDecimal mdMinim;
    private BigDecimal mdMaxim;

A classe StepTest, tbém está mapeada como a RangeTest.

Rodando o sistema, o mapeamento “sobe” como esperado. Porém ao se executar um Insert/Submissão de um formulário,
o VRaptor não captura os valores.

No meu form os campos estão como:

<select name="rangeTest.estacao.cdEstac" >
    <option value="0">-- <fmt:message key="select"/> --</option>
    ...
</select>


<input type="text" name="rangeTest.mdMinim" />

Supondo que esses dois campos foram submitidos, no TestController o método add está assim:

@Path("/test/add")
@Post
public void add(RangeTest rangeTest) {

}

Porém a minha variável rangeTest, está com suas proriedades nulas.
Alguma idéia de como solucionar isto?

vc tem todos os getters e setters pras propriedades?

habilita o log de debug do VRaptor e posta o log dessa requisição com problema aqui por favor?

Sim, tenho todos os getters e setters para as propriedades.

Segue log.

INFO: Hibernate: select nextval ('teste_cd_teste_seq')
INFO: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.web.model.RangeTest.estacao
        at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95)
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313)
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
        at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
        at br.web.dao.impl.GenericDaoImpl.saveOrUpdate(GenericDaoImpl.java:191)
        at br.web.service.impl.TestServiceImpl.saveOrUpdate(TestServiceImpl.java:100)
        at br.web.controller.TestController.add(TestController.java:82)
        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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:90)
        at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
        at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
        at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
        at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)

WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /app_web, because request parameters have already been read, or ServletRequest.getReader() has already been called
WARNING: StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception
org.hibernate.PropertyValueException: not-null property references a null or transient value: br.web.model.RangeTest.estacao
        at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95)
        at org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:292)
        at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:151)
        at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
        at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
        at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:46)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
        at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
        at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
        at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)
@Entity  
@Table(name = "teste")  
@Inheritance(strategy=InheritanceType.JOINED)  
public class Test  {  

	private Integer cdTeste;  
	private Estacao estacao;

	//Outras propriedades  

	//Getters & Setters  
	@Id  
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="teste_seq")   
	@Column(name = "cd_teste")  
	public Integer getCdTeste() {  
		return cdTeste;  
	}  

	@JoinColumn(name = "cd_estac", referencedColumnName = "cd_estac")
	@ManyToOne(optional = false, fetch = FetchType.LAZY)
	public Station getEstacao() {
		return estacao;
	}
@Entity  
@Table(name = "estacao")  
public class Estacao implements Serializable {

    private Long cdEstac;
    private List<Test> testList;  

    //Outras propriedades  
   //Getters & Setters  

    @Id
    @Basic(optional = false)
    @Column(name = "cd_estac")
    public Long getCdEstac() {
        return cdEstac;
    }


    @OneToMany(mappedBy = "estacao")
    public List<Test> getTestList() {
        return testList;
    }

Alguma idéia?

existe o método setCdEstac() na classe Estacao?

vc selecionou alguma estação ao salvar o test?

Sim, existe esse método na classe Test e foi selecionada uma estação no formulário antes de submeter. O campo Estação é um combo como esse:

<select name="rangeTest.estacao.cdEstac" >  
     <option value="...">...</option>  
      .....
</select> 

Referenciei a estação pela classe RangeTest e não pelo Test, visto que estou usando especialização.

eu queria ver o log de debug do vraptor que é um pouco antes da exception…

vai estar algo do tipo:
applying rangeTest.estacao.cdEstac with [3]

Esse é o log de inicialização da tela com form:


INFO: 09:00:29,859 DEBUG [VRaptor             ] VRaptor received a new request

INFO: 09:00:29,859 DEBUG [DefaultRequestExecution] executing stack  DefaultRequestExecution

INFO: 09:00:29,906 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor

INFO: 09:00:29,906 DEBUG [DefaultResourceTranslator] trying to access /test/form

INFO: 09:00:29,906 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: TestController.formTestController.form()]

INFO: 09:00:29,906 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor

INFO: 09:00:29,906 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor

INFO: 09:00:29,921 DEBUG [SessionImpl         ] opened session at timestamp: 12928428299

INFO: 09:00:29,921 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor HibernateTransactionInterceptor

INFO: 09:00:30,031 DEBUG [JDBCTransaction     ] begin

INFO: 09:00:30,031 DEBUG [ConnectionManager   ] opening JDBC connection

INFO: 09:00:30,031 DEBUG [JDBCTransaction     ] current autocommit status: true

INFO: 09:00:30,031 DEBUG [JDBCTransaction     ] disabling autocommit

INFO: 09:00:30,031 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor

INFO: 09:00:30,046 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor

INFO: 09:00:30,125 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor

INFO: 09:00:30,140 DEBUG [ExecuteMethodInterceptor] Invoking TestController.form()

INFO: 09:00:30,234 DEBUG [AbstractBatcher     ] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)

INFO: 09:00:30,234 DEBUG [SQL                 ] select station0_.cd_estac as cd1_0_, station0_.nm_estac as nm15_0_ from estacao station0_ order by station0_.nm_estac asc

INFO: Hibernate: select station0_.cd_estac as cd1_0_, station0_.nm_estac as nm15_0_ from estacao station0_ order by station0_.nm_estac asc

INFO: 09:00:30,343 DEBUG [AbstractBatcher     ] about to open ResultSet (open ResultSets: 0, globally: 0)

INFO: 09:00:30,359 DEBUG [Loader              ] result row: EntityKey[br.web.model.Station#2047]

...

INFO: 09:00:50,812 DEBUG [Loader              ] result row: EntityKey[br.web.model.Station#1509]

INFO: 09:00:50,906 DEBUG [AbstractBatcher     ] about to close ResultSet (open ResultSets: 1, globally: 1)

INFO: 09:00:50,906 DEBUG [AbstractBatcher     ] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)

INFO: 09:00:51,000 DEBUG [TwoPhaseLoad        ] resolving associations for [br.web.model.Station#2047]

INFO: 09:00:51,000 DEBUG [TwoPhaseLoad        ] done materializing entity [br.web.model.Station#2047]

...

INFO: 09:01:32,578 DEBUG [TwoPhaseLoad        ] resolving associations for [br.web.model.Station#1509]

INFO: 09:01:32,578 DEBUG [TwoPhaseLoad        ] done materializing entity [br.web.model.Station#1509]

INFO: 09:01:32,671 DEBUG [StatefulPersistenceContext] initializing non-lazy collections

INFO: 09:01:32,671 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ForwardToDefaultViewInterceptor

INFO: 09:01:32,781 DEBUG [ForwardToDefaultViewInterceptor] forwarding to the dafault page for this logic

INFO: 09:01:32,781 DEBUG [DefaultPageResult   ] forwarding to /WEB-INF/jsp/test/form.jsp

INFO: 09:01:32,781 DEBUG [DefaultStaticContentHandler] Deferring request to container: /cq_web/WEB-INF/jsp/test/form.jsp 

INFO: 09:01:32,890 DEBUG [JDBCTransaction     ] commit

INFO: 09:01:32,890 DEBUG [AbstractFlushingEventListener] processing flush-time cascades

INFO: 09:01:32,890 DEBUG [AbstractFlushingEventListener] dirty checking collections

INFO: 09:01:32,937 DEBUG [DefaultStaticContentHandler] Deferring request to container: /cq_web/js/ajax.js 

INFO: 09:01:32,984 DEBUG [Collections         ] Collection found: [br.web.model.Station.testList#2047], was: [br.web.model.Station.testList#2047] (uninitialized)

INFO: 09:01:32,968 DEBUG [DefaultStaticContentHandler] Deferring request to container: /cq_web/js/test.js 

INFO: 09:01:32,984 DEBUG [Collections         ] Collection found: [br.web.model.Station.testList#1011], was: [br.web.model.Station.testList#1011] (uninitialized)

INFO: 09:01:32,953 DEBUG [DefaultStaticContentHandler] Deferring request to container: /cq_web/js/ajax-dynamic-content.js 

INFO: 09:01:33,093 DEBUG [Collections         ] Collection found: [br.web.model.Station.testList#566], was: [br.web.model.Station.testList#566] (uninitialized)

...

INFO: 09:01:49,187 DEBUG [Collections         ] Collection found: [br.web.model.Station.testList#1509], was: [br.web.model.Station.testList#1509] (uninitialized)

INFO: 09:01:49,187 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 0 updates, 0 deletions to 691 objects

INFO: 09:01:49,187 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 691 collections

INFO: 09:01:49,281 DEBUG [Printer             ] listing entities:

INFO: 09:01:49,281 DEBUG [Printer             ] br.web.model.Station{testList=<uninitialized>, cdEstac=12345, nmEstac=Estac 1}

INFO: 09:01:50,500 DEBUG [Printer             ] more......

INFO: 09:01:50,515 DEBUG [JDBCTransaction     ] re-enabling autocommit

INFO: 09:01:50,546 DEBUG [JDBCTransaction     ] committed JDBC Connection

INFO: 09:01:50,546 DEBUG [ConnectionManager   ] aggressively releasing JDBC connection

INFO: 09:01:50,609 DEBUG [ConnectionManager   ] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]

INFO: 09:01:50,609 DEBUG [VRaptor             ] VRaptor ended the request

INFO: 09:01:50,718 DEBUG [DefaultStaticContentHandler] Deferring request to container: /cq_web/css/1.css 

INFO: 09:01:50,750 DEBUG [DefaultStaticContentHandler] Deferring request to container: /cq_web/images/body.jpg 

INFO: 09:01:50,765 DEBUG [DefaultStaticContentHandler] Deferring request to container: /cq_web/images/nav.jpg 

INFO: 09:01:50,765 DEBUG [DefaultStaticContentHandler] Deferring request to container: /cq_web/images/innerwrapper.jpg 

Esse é o log quando os dados do form são enviados:


INFO: 09:27:30,125 DEBUG [VRaptor             ] VRaptor received a new request

INFO: 09:27:30,125 DEBUG [DefaultRequestExecution] executing stack  DefaultRequestExecution

INFO: 09:27:30,156 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor

INFO: 09:27:30,156 DEBUG [DefaultResourceTranslator] trying to access /test/add

INFO: 09:27:30,250 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: TestController.addTestController.add(RangeTest)]

INFO: 09:27:30,250 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor

INFO: 09:27:30,265 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor

INFO: 09:27:30,265 DEBUG [SessionImpl         ] opened session at timestamp: 12928444502

INFO: 09:27:30,265 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor HibernateTransactionInterceptor

INFO: 09:27:30,265 DEBUG [JDBCTransaction     ] begin

INFO: 09:27:30,265 DEBUG [ConnectionManager   ] opening JDBC connection

INFO: 09:27:30,265 DEBUG [JDBCTransaction     ] current autocommit status: true

INFO: 09:27:30,265 DEBUG [JDBCTransaction     ] disabling autocommit

INFO: 09:27:30,265 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor

INFO: 09:27:30,281 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor

INFO: 09:27:30,281 DEBUG [OgnlParametersProvider] Applying rangeTest.variavel.cdVaria with [161]

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] cant find property for expression rangeTest.variavel.cdVaria ignoring

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] Applying rangeTest.mdMinim with [11]

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] cant find property for expression rangeTest.mdMinim ignoring

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] Applying rangeTest.mdMaxim with [15]

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] cant find property for expression rangeTest.mdMaxim ignoring

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] Applying type with [1]

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] cant find property for expression type ignoring

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] Applying rangeTest.estacao.cdEstac with [12345]

INFO: 09:27:30,390 DEBUG [OgnlParametersProvider] cant find property for expression rangeTest.estacao.cdEstac ignoring

INFO: 09:27:30,390 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for TestController.add(RangeTest) as [test]

INFO: 09:27:30,406 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: TestController.addTestController.add(RangeTest)] are [null]

INFO: 09:27:30,406 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor

INFO: 09:27:30,406 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor

INFO: 09:27:30,406 DEBUG [ExecuteMethodInterceptor] Invoking TestController.add(RangeTest)

INFO: java.lang.NullPointerException
        at br.web.dao.impl.GenericDaoImpl.saveOrUpdate(GenericDaoImpl.java:189)
        at br.web.service.impl.TestServiceImpl.saveOrUpdate(TestServiceImpl.java:100)
        at br.web.controller.TestController.add(TestController.java:82)
        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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:90)
        at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
        at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
        at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
        at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
        at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)

INFO: 09:27:35,218 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ForwardToDefaultViewInterceptor

INFO: 09:27:35,218 DEBUG [ForwardToDefaultViewInterceptor] forwarding to the dafault page for this logic

INFO: 09:27:35,375 DEBUG [DefaultPageResult   ] forwarding to /WEB-INF/jsp/test/add.jsp

INFO: 09:27:35,375 DEBUG [VRaptor             ] VRaptor received a new request

WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /cq_web, because request parameters have already been read, or ServletRequest.getReader() has already been called
INFO: 09:27:35,375 DEBUG [DefaultRequestExecution] executing stack  DefaultRequestExecution

INFO: 09:27:35,468 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor

INFO: 09:27:35,468 DEBUG [DefaultResourceTranslator] trying to access /WEB-INF/jsp/test/add.jsp

INFO: 09:27:35,468 DEBUG [VRaptor             ] VRaptor ended the request

INFO: 09:27:35,468 DEBUG [JDBCTransaction     ] commit

INFO: 09:27:35,468 DEBUG [JDBCTransaction     ] re-enabling autocommit

INFO: 09:27:35,484 DEBUG [JDBCTransaction     ] committed JDBC Connection

INFO: 09:27:35,484 DEBUG [ConnectionManager   ] aggressively releasing JDBC connection

INFO: 09:27:35,484 DEBUG [ConnectionManager   ] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]

INFO: 09:27:35,578 DEBUG [VRaptor             ] VRaptor ended the request

no meio do log:

cant find property for expression rangeTest.estacao.cdEstac ignoring 

existe o caminho: rangeTest.getEstacao().setCdEstac() ?
os getters e setters estão no padrão javabean?

A classe “RangeTest” não tem o atributo “estacao”, pois teoricamente estou herdando ele (o atributo) de “Test”. Por isso não inseri getter/setter para ele em “RangeTest” nem para os demais campos herdados.

Segue código das duas classes:

Test:


@Entity    
@Table(name = "teste")    
@Inheritance(strategy=InheritanceType.JOINED)    
public class Test  {    
   
   private Integer cdTeste;    
   private Estacao estacao;  
  
   //Outras propriedades    

   //Getters & Setters    
   @Id    
   @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="teste_seq")     
   @Column(name = "cd_teste")    
   public Integer getCdTeste() {    
      return cdTeste;    
   }    
 
   @JoinColumn(name = "cd_estac", referencedColumnName = "cd_estac")  
   @ManyToOne(optional = false, fetch = FetchType.LAZY)  
   public Station getEstacao() {  
      return estacao;  
   }  
}

RangeTest:


@Entity  
@Table(name = "teste_range")  
@PrimaryKeyJoinColumn(name = "cd_teste_range")  
public class RangeTest extends Test {    

  private BigDecimal mdMinim;  
  private BigDecimal mdMaxim;  

  //gettters & setters
}

entendi o problema… vou tentar reproduzir aqui

testei aqui e funcionou tranquilo…

creio que seja algum problema com os getters e setters.
se eles tiverem qqer coisa que não sejam padrão vai falhar. Por exemplo o setter não retornar void ou algum problema com maiúscula e minúscula.

tente apagá-los e gerá-los com o seu eclipse ou netbeans (ignore as anotações da jpa por enquanto)

Funcionou!

Revisei os getters e setters e estão todos conforme padrão. Mas o que fiz de diferente foi acrescentar referencedColumnName=“cd_teste” na annotation @PrimaryKeyJoinColumn da classe filha. Ela ficou assim:


@Entity
@Table(name = "teste_range")
@PrimaryKeyJoinColumn(name="cd_teste_range", referencedColumnName="cd_teste")
public class RangeTest extends Test {
...
}

Valeu pela ajuda, Lucas!!!