Mapeamento OneToOne

5 respostas
Dassayev

Boa tarde pessoal.

Estou com uma dúvida em como fazer um mepeamento OneToOne.
Eu tenho uma classe chamada Escola que tem um atributo chamado municipio do tipo Municipio.
Quero fazer esse mapeamento.

Municipio
@Entity
@Table(name = "municipios", catalog = "sge", schema = "public")
public class Municipio extends Objeto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    //@GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Long id;
    @Basic(optional = false)
    @Column(name = "descricao")
    private String descricao;
    @Basic(optional = false)
    @Column(name = "uf")
    private String uf;
    @Basic(optional = false)
    @Column(name = "ibge")
    private String ibge;
    @Column(name = "status")
    private String status;

    public Municipio() {
    }
Escola
@Entity
@Table(name = "escolas", catalog = "sge", schema = "public")
@BatchSize(size=0)
public class Escola extends Objeto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    //@GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Long id;
    @Basic(optional = false)
    @Column(name = "razao_social")
    private String razaoSocial;
    @Basic(optional = false)
    @Column(name = "nome_fantasia")
    private String nomeFantasia;
    @Basic(optional = false)
    @Column(name = "cnpj")
    private String cnpj;
    @Column(name = "numero_inep")
    private String numeroInep;
    @Column(name = "numero_cnas")
    private String numeroCnas;
    @Column(name = "numeroCebas")
    private String numeroCebas;
    @Column(name = "dependencia_administrativa")
    private String dependenciaAdministrativa;
    @Column(name = "categoria")
    private String categoria;
    @Column(name = "predio")
    private String predio;
    @Column(name = "conveniada")
    private String conveniada;
    @Column(name = "logradouro")
    private String logradouro;
    @Column(name = "numero")
    private String numero;
    @Column(name = "complemento")
    private String complemento;
    @Column(name = "bairro")
    private String bairro;
    @JoinColumn(name="municipio", referencedColumnName="id")
    @OneToOne
    private Municipio municipio;
    @Column(name = "cep")
    private String cep;
    @Column(name = "telefone")
    private String telefone;
    @Column(name = "fax")
    private String fax;
    @Column(name = "email")
    private String email;
    @Column(name = "nome_diretor")
    private String nomeDiretor;
    @Column(name = "cpf_diretor")
    private String cpfDiretor;
    @Column(name = "telefone_diretor")
    private String telefoneDiretor;
    @Column(name = "email_diretor")
    private String emailDiretor;
    @Column(name = "observacao")
    private String observacao;
    @Column(name = "status")
    private String status;

    public Escola() {
    }
Dessa forma esta gerando esse erro:
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at br.com.jd.dao.Dao.inserir(Dao.java:22)
	at br.com.jd.facade.EscolaFacade.inserir(EscolaFacade.java:22)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:421)
	at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
	at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1529)
	at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:907)
	at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)
	at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
	at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)
	at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
	at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:147)
	at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:278)
	at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:322)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into sge.public.escolas (bairro, categoria, cep, cnpj, complemento, conveniada, cpf_diretor, dependencia_administrativa, email, email_diretor, fax, logradouro, municipio, nome_diretor, nome_fantasia, numero, numeroCebas, numero_cnas, numero_inep, observacao, predio, razao_social, status, telefone, telefone_diretor, id) values (, Particular, , , , NULL, , , , , , , 125, , CSTA, , , , 123, , Proprio, COLEGIO SAO TOMAS DE AQUINO, A, , , 11) foi abortada. Chame getNextException para ver a causa.
	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2531)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1344)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:343)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2668)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	... 41 more

Alguém poderia me ajudar?

5 Respostas

RicardoYukito

sge.public.escolas … no seu banco esta tudo minusculo tbm ? qual banco esta utilzando ?

Dassayev

Estou utilizando o postgres e o nome está exatamente assim, tudo minusculo.

RicardoYukito
coias que tentaria;

remover o @BatchSize(size=0)

usar o  @GeneratedValue(strategy = GenerationType.AUTO);

postgress acredito que trabalhe com sequences… se for o caso configurar o @Sequence para usar no GeneratedValue

e se voce já cria uma conexao direto na base , @Table(name = “tabela”) apenas.

Att.

Dassayev

Já removi o @BatchSize(size=0) e o erro persiste.
Quanto ao Generator, eu informo o id. Faço um select na sequencia e ja criou o Objeto com o id setado.

Dassayev

Consegui resolver. Era um atributo que estava com o nome errado!
Obrigado a todos!

Criado 12 de abril de 2012
Ultima resposta 23 de abr. de 2012
Respostas 5
Participantes 2