Java 如何使用Join Fetch初始化LazyCollection

Java 如何使用Join Fetch初始化LazyCollection,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,ProdutValor是一个包含与Produto的多对一关系的表。这是我在ProdutValor中获取所有数据的方式: @Override public List<ProdutoValorETO> getAll() { String query = " SELECT * FROM produtovalor WHERE ativo = TRUE; "; SQLQuery eQuery = getCurrentSession().creat

ProdutValor是一个包含与Produto的多对一关系的表。这是我在ProdutValor中获取所有数据的方式:

    @Override
    public List<ProdutoValorETO> getAll() {
        String query = " SELECT * FROM produtovalor WHERE ativo = TRUE; ";
        SQLQuery eQuery = getCurrentSession().createSQLQuery(query).addEntity(ProdutoValorETO.class);
        return CastUtils.castList(eQuery.list(), ProdutoValorETO.class);
    }

如何使用Produto获取ProdutValor的列表

错误在于hibernate抱怨找不到“produtovalor”实体

在Hql查询中,必须使用实体名而不是表名

("SELECT e FROM produtovalor e JOIN FETCH e.produto")
应该是

("SELECT e FROM ProdutoValorETO e JOIN FETCH e.produto")
此外,除非必要,否则应避免使用sql本机查询,因为这会降低应用程序到不同数据源的可移植性

@Entity
@Table(name = "produtoValor")
public class ProdutoValorETO extends BaseTO {

    @Id
    @Column(name = "id", nullable = false)
    @SequenceGenerator(name = "id", sequenceName = "produto_valor_sequence", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id")
    private Long id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "idLojista")
    private LojistaTO lojista;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "idProduto")
    private ProdutoETO produto;

    @Column
    private Integer quantidadeMinima;

    @Column
    private Integer quantidadeMaxima;

    @Column
    private Double valor;

    @Column
    private Integer estoque;

    @Column
    private Integer estoqueComprometido;

    //getters and setters
}
("SELECT e FROM produtovalor e JOIN FETCH e.produto")
("SELECT e FROM ProdutoValorETO e JOIN FETCH e.produto")