Fórum Hibernate ignora propriedade name do @Column #604110
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
Gostei + 1
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
Gostei + 0
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)