Como Cria Tabela Camel Case Hibernate PostGres

Pessoal, como posso estar criando uma tabela no banco de dados PostGres mas o nome da tabela ser CamelCase
Exemplo : Estou precisando cria a tabela com o nome ClienteLegado

Já tentei de tudo. A tabela é criada como clientelegado, cliente_legado, mas ClienteLegado não consegui fazer. Mesmo com as configurações abaixo a tabela é criada assim :
Hibernate: create table cliente_legado. Sabem alguma forma de

Classe :

@Entity
@Table(name=“ClienteLegado”)
public class Cliente implements Serializable {

private static final long serialVersionUID = 1L;
 @Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "ClienteLegadoId")
private Long id;

@Column(name = "Codigo")
private String codigo;

@Column(name = "Nome")
private String nome;

@Column(name = "Endereco")
private String endereco;

@Column(name = "Cidade")
private String cidade;

@Column(name = "Bairro")
private String bairro;

Configuração do Postegres

spring.datasource.url=jdbc:postgresql://localhost:5431/comunicacao
spring.datasource.username=postgres
spring.datasource.password=056409

spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false

Só uma pergunta:

Por quê?

Dentro do meu banco de dados que está em produção que é PostGres está assim . ClienteLegado. Estou precisamos consumir os dados que estão dentro desta tabela, mas o Hibernate só cria a tabela assim : cliente_legado ou clientelegado. Ele cria de tudo quando é jeito , menos ClienteLegado

é porque esse é o padrão.

Você está tendo problemas como tabela não encontrada/inexistente?
Se não, então não tem por que definir o nome exato, até por que, o padrão do postgres é case insensitive.

Sim. Estou tendo problemas sim. Exemplo : eu tenho um mapeamento Rest que responde assim : http://localhost:8080/clientes
Só que ele não me retorna nada, pois ele primeiro criou assim :

Hibernate: create table cliente_legado (cliente_legado_id int8 not null, bairro varchar(255), cidade varchar(255), codigo varchar(255), endereco varchar(255), nome varchar(255), primary key (cliente_legado_id))

E olha onde faz o select :
select cliente0_.cliente_legado_id as cliente_1_0_, cliente0_.bairro as bairro2_0_, cliente0_.cidade as cidade3_0_, cliente0_.codigo as codigo4_0_, cliente0_.endereco as endereco5_0_, cliente0_.nome as nome6_0_ from cliente_legado cliente0

Dentro da tabela cliente_legado que não tem dados nenhum. A minha tabela que tem dados é a ClienteLegado

O problema não está no banco, nem no hibernate. O problema está na configuração que você fez.
A própria documentação do hibernate é bem clara quanto a não usar isso

E afins em produção.

De qualquer forma, se você excluir a propriedade name da anotação @Table, você estará forçando o hibernate a “criar” tabelas com os nomes das entities.

Retirando a propriedade a classe ficou assim

@Entity
@Table
public class ClienteLegado implements Serializable {
private static final long serialVersionUID = 1L;
@Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "ClienteLegadoId")
private Long id;

Depois de subir a aplicação e informar o endereço do mapeamento

org.postgresql.util.PSQLException: ERROR: relation “cliente_legado” does not exist
Posição: 235

Você acha que isso é alguma coisa do postgres ? Por que nem no SqlServer deu isso.

O hibernate não vai procurar uma tabela pelo name caso o atributo name tenha sido suprimido/omitido. Neste caso, o padrão é buscar por uma tabela cujo nome seja exatamente igual ao nome da classe definida como @Entity.

Galera, solução encontrada foi.

Nas configurações do application.properties

spring.jpa.hibernate.naming.implicit- strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Mapeamento nome da tabela

@Entity
@Table(name="\"ClienteLegado\"")

Mapeando nome dos campos

@Column(name="\"Codigo\"")
private String codigo;

@Column(name="\"Nome\"")
private String nome;

Vale lembrar que este caso é um caso que foge da regra, pois a tabela no banco de dados do cliente contempla o nome em camel case , tal como ClienteLegado.
Fazendo testes quando o nome da tabela é em minúsculo que é o padrão do PostGres, não existe a necessidade disso tudo bastando seguir pelo método tradicional.

1 curtida