当我尝试从数据库中检索某些实体时,我遇到了一个奇怪的问题。实体所在的表只有4行。当我尝试选择所有行时,我得到一个列表,其中第一个和最后一个元素的加载正确,但是,第二个和第三个元素的所有属性都为null。这是我的调试控制台的打印:
实体很简单,如下所示:
@Entity
@Table(name = "Empresa")
public class Empresa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID_EMPRESA")
private Integer idEmpresa;
@Basic(optional = false)
@Column(name = "NOME_EMPRESA")
@OrderColumn
private String nomeEmpresa;
@Column(name = "CNPJ")
private String cnpj;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "iDEmpresa", fetch = FetchType.LAZY)
private List<Cadastro> cadastroList;
}
如果您想知道我如何检索实体,请输入以下代码:
@Override
public List<T> recuperarTodos() {
Query query = entityManager.createQuery(criarQueryRecuperarTodos());
limitarQuantidadeDeRegistros(query);
return query.getResultList();
}
private String criarQueryRecuperarTodos() {
StringBuilder builder = new StringBuilder("SELECT e FROM ");
builder.append(classe.getSimpleName());
builder.append(" e");
builder.append(criarParametrosOrdenacao());
return builder.toString();
}
答案 0 :(得分:2)
这是完全合法和预期的情况。 Hibernate使用动态生成的代理(因此javaassist对象,在过去的hibernate中也使用了cglib)作为占位符,用于不完全获取的实体以允许延迟提取。因此,一般来说,您不应尝试直接访问属性值。使用getter允许hibernate发出适当的数据库查询并填充实体。在某些情况下这可能是一个问题 - 例如,如果在Hibernate会话之外首次请求值。