Bom dia.
Comecei a usar o Spring e estou com um problema.
Quando eu coloco algum relacionamento nas Classes ele não funciona, mas senão tiver relacionamentos funciona.
Devo colocar os relacionamentos no spring.xml?
Segue as classes:
package br.com.autocom.modelo;
import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
@SequenceGenerator(name = "Cadastro_Sequencia", sequenceName = "Cadastro_Sequencia")
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Cadastro implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="Cadastro_Sequencia")
@Column(name="codigoCadastro")
private Integer codigoCadastro;
private String razaoSocial;
private String nomeFantasia;
private String endereco;
private String cep;
private String setor;
private String complemento;
private String numero;
private String obs;
private String cnpjCPF;
private Calendar dataAtualizado;
private Calendar dataCadastro;
private Calendar dataSuspensao;
private String email;
private String InscRg;
private String cidade;
private String estado;
private String telefone1;
private String celular1;
private String contato1;
private String telefone2;
private String celular2;
private String contato2;
@ManyToOne (targetEntity=br.com.autocom.modelo.UfCidade.class)
@JoinColumn(name="codigoEstadoCidade", nullable=false)
private UfCidade ufCidade;
//Getters and Setters omitidos
}
UfCidade.java
[code]
package br.com.autocom.modelo;
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
@Entity
@SequenceGenerator(name = “EstadoCidade_Sequencia”, sequenceName = “EstadoCidade_Sequencia”)
public class UfCidade implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="EstadoCidade_Sequencia")
@Column(name="codigoEstadoCidade")
private Integer codigoEstadoCidade;
private String estado;
private String municipio;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "cadastro")
@JoinColumn(name = "codigoCadastro")
private List<Cadastro> cadastro;
//Getters and Setters omitidos
}[/code]
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- Conexão com banco de dados -->
<bean id="dataSource" class="br.com.autocom.config.Conexao" />
<!-- Hibernate -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
<list>
<value>br.com.autocom.modelo.Cadastro</value>
<value>br.com.autocom.modelo.CadastroFornecedor</value>
<value>br.com.autocom.modelo.CadastroCliente</value>
<value>br.com.autocom.modelo.Categoria</value>
<value>br.com.autocom.modelo.Contas</value>
<value>br.com.autocom.modelo.Lancamentos</value>
<value>br.com.autocom.modelo.TipoLancamento</value>
<value>br.com.autocom.modelo.UfCidade</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>
</props>
</property>
<property name="dataSource" ref="dataSource" />
</bean>
<!-- Injeta uma sessão do hibernate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- DAOs -->
<bean id="cadastroFornecedorDAO" class="br.com.autocom.dao.CadastroFornecedorDAO">
<!-- Injeta esse objeto hibernateTemplate dentro do DAO -->
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
</beans>
BeanFactory.java
package br.com.autocom.util;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BeanFactory {
private static ClassPathXmlApplicationContext ctx;
static {
ctx = new ClassPathXmlApplicationContext("br/com/autocom/config/spring.xml");
}
private BeanFactory() {
}
public static Object getBean(String beanName) {
return ctx.getBean(beanName);
}
public static Object getBean(String beanName, Class classe) {
return ctx.getBean(beanName, classe);
}
}
Exception:
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2ad9ef: defining beans [dataSource,sessionFactory,hibernateTemplate,cadastroFornecedorDAO]; root of factory hierarchy
java.lang.ExceptionInInitializerError
at br.com.autocom.controle.CadastrarFornecedorControle.<init>(CadastrarFornecedorControle.java:19)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:405)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:267)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)
at org.apache.el.parser.AstValue.getTarget(AstValue.java:94)
at org.apache.el.parser.AstValue.invoke(AstValue.java:245)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:772)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
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:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
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:1001)
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(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [br/com/autocom/config/spring.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: br.com.autocom.modelo.Cadastro.cadastro in br.com.autocom.modelo.UfCidade.cadastro
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
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:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:546)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at br.com.autocom.util.BeanFactory.<clinit>(BeanFactory.java:10)
... 45 more
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: br.com.autocom.modelo.Cadastro.cadastro in br.com.autocom.modelo.UfCidade.cadastro
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:576)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:541)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:324)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
... 57 more
Estou meio perdido no Spring. ouço falar de tanta coisa sobre ele que parece que existe vários Springs. É isso mesmo?
Esse que estou usando para a persistência funciona perfeitamente, desde que não exista relacionamentos nas classes.
Como posso consertar esse erro? Vcs me recomendam algum tutorial?
Agradeço a ajuda!