Hibernate ignora propriedade name do @Column

31/07/2019

14

Boa noite pessoal,

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

Lucas Rezende

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

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.
Responder

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.


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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar