如果在jpa

时间:2017-03-29 17:36:29

标签: java jpa oracle11g

我有一个名为Test.java的实体,有70个字段,其中一些字段也与其他实体相关(通过连接一对多,多对一等等)。

我需要有一个这种类型的对象,但是我不需要所有字段只有3个字段,其中一个字段与其他实体有外键关系。

所以,我在执行查询jpa时编写了一个本机查询,执行其他查询也会导致花费很多时间来完成。

这是我的实体类:

    public Class Test implements Serializable{

    @Id
    private int id;

    @ManyToOne
    @JoinColumn(name = "STATUSID")
    private xxxxx  xxxxx;


   /// other fields, getters and setters

    }   

这是我的原生查询

  public List<Order> getAllOpenOrders() {

    final String query = "SELECT t.* from T_TEST";

     Query createNativeQuery = em.createNativeQuery(query, Test.class);

    List<Order> resultList = createNativeQuery.getResultList();

    return resultList;
}

如何使用选定的字段获取Order实体对象,我不需要其他字段意味着我只使用这三个字段来实现我的功能。

如何停止执行其他查询?

谢谢。

1 个答案:

答案 0 :(得分:1)

您只能使用Projections选择所需的列。您不必为此寻求本地查询。

据我记得(我早就调试了),hibernate在执行本机查询之前会执行刷新。这导致在执行本机查询之前执行所有挂起的查询。在您遇到其他一些问题的情况下可能就是这种情况。

您可以使用Projections,这是一种更简洁的方式来选择所需的列。

在这里回答:https://stackoverflow.com/a/11626877/564503