GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Mapeamento com InheritanceType.JOINED gera erro de table not found

jpa
hibernate
Tags: #<Tag:0x00007f65366270a8> #<Tag:0x00007f6536626e00>
#1

Olá pessoal,

Estou tentando resolver uma atividade da faculdade onde foi passado especificações para mapearmos as classes com JPA. Tenho a seguinte herança para mapear: Funcionario (classe pai), Vendedor (filha) e Admistrativo (filha). Logo de primeira fiz o mapeamento utilizando a InheritanceType.TABLE_PER_CLASS, funcionou e criou as tabelas no banco. Porém o professor quer que utilizemos o InheritanceType.JOINED, e é ai que está o meu problema, fiz o mapeamento seguindo o exemplo dele e não funcionou, tentei vários exemplos na internet e tmbém não funcionou. Abaixo colocarei o mapeamento que fiz até agora e o erro do Hibernate.

OBS.: Para os InheritanceType.TABLE_PER_CLASS e o InheritanceType.SINGLE_TABLE funcioana perfeitamente, o problema é mapear com o InheritanceType.JOINED;

Classe Pai

 @Entity(name = "tab_funcionario")
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
 @Table(uniqueConstraints = {
	@UniqueConstraint(name = "un_funcionario_rg", columnNames = { "rg",  "rg_orgao_expedidor", "rg_uf" }) }

public abstract class Funcionario {

@Id
@Column(name = "cpf", length = 11, nullable = false, columnDefinition = "CHAR(11)")
private String cpf;

@Column(name = "nome", length = 40, nullable = false, columnDefinition = "VARCHAR(40)")
private String nome;

@Column(name = "rg", length = 12, nullable = true, columnDefinition = "CHAR(12)")
private String rg;

@Column(name = "rg_orgao_expedidor", length = 20, nullable = true, columnDefinition = "VARCHAR(20)")
private String rgOrgaoExpedidor;

@Column(name = "rg_uf", length = 2, nullable = true, columnDefinition = "CHAR(2)")
private String rgUf;

@ElementCollection()
@CollectionTable(name = "tab_funcionario_telefones", joinColumns = @JoinColumn(name = "cpf"))
@Column(name = "telefone", length = 12, nullable = false, columnDefinition = "VARCHAR(12)")
private List<String> telefone = new ArrayList<>();

@Temporal(TemporalType.DATE)
@Column(name = "data_nascimento", nullable = false, columnDefinition = "DATE")
private Date dataNascimento;

@Embedded()
@Column(name = "endereco", nullable = false)
private Endereco endereco;

Filhas

@Entity(name = "tab_vendedor")
public class Vendedor extends Funcionario {

@Column(name = "percentual_comissao", nullable = false, precision = 10, scale = 2)
private BigDecimal percentualComissao;

@Convert(converter = SituacaoVendedorConverter.class)
@Column(columnDefinition = "char(3)", nullable = false)
private SituacaoVendedorEnum situacao;

@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name = "tab_vendedor_pessoa_juridica", joinColumns = {
		@JoinColumn(name = "cpf") }, inverseJoinColumns = { @JoinColumn(name = "cnpj") })
private List<PessoaJuridica> clientes = new ArrayList<>();


@Entity(name = "tab_administrativo")
public class Administrativo extends Funcionario {

@Column(name = "turno", nullable = false)
private Integer turno;

Erro Hibernate

1    [main] ERROR org.hibernate.AssertionFailure  - HHH000099: an assertion failure occurred 
(this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): 
org.hibernate.AssertionFailure: Table public.tab_funcionario not found


3    [main] ERROR br.ucsal.bes20191.bd2.mapeamentojpa.atividade.Teste  - Erro: 
javax.persistence.PersistenceException: [PersistenceUnit: mapeamento-jpa] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:967)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at br.ucsal.bes20191.bd2.mapeamentojpa.atividade.Teste.main(Teste.java:14)


Caused by: org.hibernate.MappingException: Could not instantiate persister org.hibernate.persister.entity.JoinedSubclassEntityPersister
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:112)
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:128)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:301)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:452)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:889)
... 4 more


Caused by: org.hibernate.AssertionFailure: Table public.tab_funcionario not found
at org.hibernate.persister.entity.AbstractEntityPersister.getTableId(AbstractEntityPersister.java:5241)
at org.hibernate.persister.entity.JoinedSubclassEntityPersister.<init>(JoinedSubclassEntityPersister.java:433)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96)
... 9 more
0 Likes