Problema ao fazer o relacionamento entre tabelas no JPA

3 respostas
java
M

Estou tendo problemas ao fazer o relacionamento @ManyToOne

Qndo eu tento cadastrar um objeto de ModeloDocumento, ele gera esse erro:

Caused by: org.hibernate.exception.SQLGrammarException: Error accessing column metadata: tb_documento_modelo_documento
	at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106)
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
	at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.convertSQLException(InformationExtractorJdbcDatabaseMetaDataImpl.java:98)
	at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.getForeignKeys(InformationExtractorJdbcDatabaseMetaDataImpl.java:849)
	at org.hibernate.tool.schema.extract.internal.TableInformationImpl.foreignKeys(TableInformationImpl.java:97)
	at org.hibernate.tool.schema.extract.internal.TableInformationImpl.getForeignKeys(TableInformationImpl.java:91)
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.checkForExistingForeignKey(AbstractSchemaMigrator.java:471)
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys(AbstractSchemaMigrator.java:423)
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:249)
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309)
	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:938)
	... 42 more
Caused by: org.postgresql.util.PSQLException: ERROR: column t1.tgconstrname does not exist
  Posição: 113
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
	at org.postgresql.jdbc2.AbstractJdbc2DatabaseMetaData.getImportedExportedKeys(AbstractJdbc2DatabaseMetaData.java:3477)
	at org.postgresql.jdbc2.AbstractJdbc2DatabaseMetaData.getImportedKeys(AbstractJdbc2DatabaseMetaData.java:3670)
	at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.getForeignKeys(InformationExtractorJdbcDatabaseMetaDataImpl.java:798)
	... 53 more
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at dao.ModeloDocumentoDAO.closeEntityManager(ModeloDocumentoDAO.java:40)

Pelo que me parece ele, há um problema na minha entidade de relacionamento chamado DocumentoModeloDocumento:

@Entity
@Table(name = "TB_DOCUMENTO_MODELO_DOCUMENTO")
public class DocumentoModeloDocumento {

	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="documento_modelo_documento_sequence")
	@SequenceGenerator(name="documento_modelo_documento_sequence", sequenceName="documento_modelo_documento_seq", allocationSize = 1)
	@Column(name = "ID_DOCUMENTO_MODELO_DOCUMENTO")
	private Long id;
	
	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_DOCUMENTO_FK")
	private Documento documento;
	
	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_MODELO_DOCUMENTO_FK")
	private ModeloDocumento modeloDocumento;
}

Algm sabe o q eu fiz de errado?

3 Respostas

J

Verifica o nome da tabela e das colunas que você atribuiu nas anotações, pois segundo o log o erro apresentado é um erro gramatical.

M

Uma dúvida, eu n tenho um conhecimento de como fazer a persistência em uma aplicação de desktop é necessário ter alguma API especifica para isso?
Pois como eu ja fiz algumas aplicações java Web eu montei persistência baseada nisso, por isso não sei se está correto.

Pq pelo q percebi a anotação manytoone é que está gerando esse problema e esse mesmo erro ocorre quando eu crio uma constraint em uma tabela

J

Não existe diferença entre fazer a persistência dos dados em uma aplicação web e em uma aplicação desktop utilizando JPA, é a mesma coisa, você tem que ter seus objetos mapeados e relacionados da forma correta de acordo com framework que estiver utilizando para a implementação.

Criado 4 de maio de 2019
Ultima resposta 5 de mai. de 2019
Respostas 3
Participantes 2