我使用的是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_
答案 0 :(得分:2)
这是因为你在getter方法上使用了@Id注释。所以jpa只查看getter来获取列名并忽略字段上的@column注释,但是当你将它放在getter上时就开始工作。
作为练习,您可以将Id注释移动到字段级别,并且应该再次看到它。
建议在场级别或获取者处放置jpa注释。但不要混用