Hibernate ignora propriedade name do @Column
31/07/2019
0
Boa noite pessoal,
Seguinte eu tenho uma classe GenericEntity e Usuario, ambas descritas abaixo:
O problema que está ocorrendo é que ao invés dele fazer o select com o nome da coluna como ID_USUARIO, ele pega o nome do atributo declarado no GenericEntity que é id, aí dá erro no banco de que a coluna não foi encontrada. Isso começou a ocorrer após eu tirar a criação automática do hibernate, pois decidi que não quero usá-la, e sim fazer a mão mesmo.
Já tentei tirar o @Id do GenericEntity aí lança o erro java.lang.IllegalArgumentException: This class [dev.ourcycle.cyclemanager.model.entity.GenericEntity] does not define an IdClass.
Aí tirando o @MappedSuperclass muda para o erro not managed bean do spring.
Não tenho ideia do que fazer para arrumar, pois eu vou precisar de uma GenericEntity com mais atributos e com o @Id dá problema e sem também.
Se alguém puder me ajudar nisso, ficarei muito grato.
Qualquer dúvida só falar, talvez tenha ficado difícil de entender kk.
Seguinte eu tenho uma classe GenericEntity e Usuario, ambas descritas abaixo:
@Component @MappedSuperclass public abstract class GenericEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_generator") protected Long id; public abstract Long getId(); public abstract void setId(Long id); }
@Entity @Component @Table(name = "USUARIO") @SequenceGenerator(initialValue = 1, allocationSize = 1, name = "id_generator", sequenceName = "SEQ_USUARIO_ID_USUARIO") public class Usuario extends GenericEntity { private static final long serialVersionUID = 1L; @NotBlank @Column(name = "NOME", nullable = false, unique = true) private String nome; @NotBlank @Column(name = "LOGIN", nullable = false, unique = true) private String login; @NotBlank @Column(name = "SENHA", nullable = false) private String senha; // @ManyToOne // @JoinColumn(name = "ID_CLIENTE", foreignKey = @ForeignKey(name = "FK_US_CLI")) // private Cliente cliente; // @OneToMany // @JoinTable(name = "USUARIO_PERMISSOES", // joinColumns = @JoinColumn(name = "ID_USUARIO"), // inverseJoinColumns = @JoinColumn(name = "ID_PERMISSAO")) @Transient private Set<Permissoes> permissoes; @Transient private String jwtToken; public Usuario() { } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; } // public Cliente getCliente() { // return cliente; // } // // public void setCliente(Cliente cliente) { // this.cliente = cliente; // } public Set<Permissoes> getPermissoes() { return permissoes; } public void setPermissoes(Set<Permissoes> permissoes) { this.permissoes = permissoes; } public String getJwtToken() { return jwtToken; } public void setJwtToken(String jwtToken) { this.jwtToken = jwtToken; } @Override @Column(name = "ID_USUARIO") public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } }
O problema que está ocorrendo é que ao invés dele fazer o select com o nome da coluna como ID_USUARIO, ele pega o nome do atributo declarado no GenericEntity que é id, aí dá erro no banco de que a coluna não foi encontrada. Isso começou a ocorrer após eu tirar a criação automática do hibernate, pois decidi que não quero usá-la, e sim fazer a mão mesmo.
Já tentei tirar o @Id do GenericEntity aí lança o erro java.lang.IllegalArgumentException: This class [dev.ourcycle.cyclemanager.model.entity.GenericEntity] does not define an IdClass.
Aí tirando o @MappedSuperclass muda para o erro not managed bean do spring.
Não tenho ideia do que fazer para arrumar, pois eu vou precisar de uma GenericEntity com mais atributos e com o @Id dá problema e sem também.
Se alguém puder me ajudar nisso, ficarei muito grato.
Qualquer dúvida só falar, talvez tenha ficado difícil de entender kk.
Lucas Rezende
Curtir tópico
+ 0
Responder
Post mais votado
01/08/2019
Consegui resolver, era só colocar a anotação @AttributeOverride(name = "id", column = @Column(name = "ID_USUARIO")) classe filha e pronto, deu tudo certo. Vlw!!
Lucas Rezende
Responder
Mais Posts
01/08/2019
Marcio Souza
Olá Lucas.
Usar a anotação @Column(name = "id_usuario") no mapeamento da classe filha não vai funcionar. Se pretende trabalhar com uma classe genérica, use apenas ID como o nome das suas colunas.
Usar a anotação @Column(name = "id_usuario") no mapeamento da classe filha não vai funcionar. Se pretende trabalhar com uma classe genérica, use apenas ID como o nome das suas colunas.
Responder
01/08/2019
Lucas Rezende
Olá Lucas.
Usar a anotação @Column(name = "id_usuario") no mapeamento da classe filha não vai funcionar. Se pretende trabalhar com uma classe genérica, use apenas ID como o nome das suas colunas.
Usar a anotação @Column(name = "id_usuario") no mapeamento da classe filha não vai funcionar. Se pretende trabalhar com uma classe genérica, use apenas ID como o nome das suas colunas.
Certo, mas a questão é que por questão de organização e padronização, não quero deixar os ids com o nome de ID somente, nesse caso a solução seria retirar o id da classe pai e colocar somente na classe filha, porém por causa da @MappedSuperclass se eu tirar o id fica dando o erro do IdClass no pai citado anteriormente, não há outra forma de eu fazer a herança sem ter que colocar um id na classe pai?
Responder
Clique aqui para fazer login e interagir na Comunidade :)