注释@Column包使用spring数据中的错误javax.persistence

时间:2016-12-17 16:58:42

标签: java hibernate jpa spring-data

我使用的是Spring Data,而且我遇到了这个例外情况,我不理解为什么。

域中的dataCadastro字段是数据库中唯一具有不同名称的字段。在基地是datacad

存储库

public interface IRepositorioUsuario extends CrudRepository<Usuario, Long> {

}

服务

@Stateless
public class UsuarioService {

    @Inject 
    IRepositorioUsuario usuarioRepositorio;

    public void buscar() {
        usuarioRepositorio.findAll().forEach(u -> System.out.println(u.getNome()));
    }

}

@Entity
@Table(name="TUSUARIO")
public class Usuario implements Serializable {

    private static final long serialVersionUID = -5427866189669150032L;

    private Long codigo;
    private String nome;
    private String login;
    private String senha;
    @Column(name="datacad") // query error.....
    private Date datacadastro;
    private Boolean situacao;

    @Id
    public Long getCodigo() {
        return codigo;
    }
    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }
    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 Date getDatacadastro() {
        return datacadastro;
    }
    public void setDatacadastro(Date datacadastro) {
        this.datacadastro = datacadastro;
    }
    public Boolean getSituacao() {
        return situacao;
    }
    public void setSituacao(Boolean situacao) {
        this.situacao = situacao;
    }

// Omitting hasCode

错误查询

SQL Error: 1054, SQLState: 42S22
Unknown column 'usuario0_.datacadastro' in 'field list'

select
        usuario0_.codigo as codigo1_0_,
        usuario0_.datacadastro as datacada2_0_,
        usuario0_.login as login3_0_,
        usuario0_.nome as nome4_0_,
        usuario0_.senha as senha5_0_,
        usuario0_.situacao as situacao6_0_ 

    from TUSUARIO usuario0_

使用getDataCadastro中的注释@Column(name = datacad)

Seccess

select
        usuario0_.codigo as codigo1_0_,
        usuario0_.datacad as datacad2_0_,
        usuario0_.login as login3_0_,
        usuario0_.nome as nome4_0_,
        usuario0_.senha as senha5_0_,
        usuario0_.situacao as situacao6_0_ 

    from TUSUARIO usuario0_

1 个答案:

答案 0 :(得分:2)

这是因为你在getter方法上使用了@Id注释。所以jpa只查看getter来获取列名并忽略字段上的@column注释,但是当你将它放在getter上时就开始工作。

作为练习,您可以将Id注释移动到字段级别,并且应该再次看到它。

建议在场级别或获取者处放置jpa注释。但不要混用