Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate中单向@OneToMany映射中的子实体计数_Java_Database_Oracle_Hibernate - Fatal编程技术网

Java hibernate中单向@OneToMany映射中的子实体计数

Java hibernate中单向@OneToMany映射中的子实体计数,java,database,oracle,hibernate,Java,Database,Oracle,Hibernate,我正在从事一个项目,其中两个实体具有单向@OneToMany映射。 当我尝试使用此查询加载特定父id的所有子实体时- 从父p中选择p.childEntities,其中p.id=:parentId 它很好用。还要注意,这里我使用HibernateAPI进行分页,所以我只得到10,25。。。记录。 在很多情况下,我只需要计算实体的数量。 现在,我正试图通过此查询仅加载所有子实体的计数- select count(p.childEntities) from Parent p where p.id =:

我正在从事一个项目,其中两个实体具有单向@OneToMany映射。 当我尝试使用此查询加载特定父id的所有子实体时-

从父p中选择p.childEntities,其中p.id=:parentId

它很好用。还要注意,这里我使用HibernateAPI进行分页,所以我只得到10,25。。。记录。 在很多情况下,我只需要计算实体的数量。 现在,我正试图通过此查询仅加载所有子实体的计数-

select count(p.childEntities) from Parent p where p.id =:parentId
该操作失败,ORACLE错误代码为-ORA-00936:缺少表达式

我的情况(此项目权限较低)我无法将实体映射更改为双向映射。并且不使用本机SQL。 我还认为使用-

“从父p中选择p.childEntities,其中p.id=:parentId”

然后,仅仅获取count的size()就需要付出高昂的性能代价

项目中的映射一瞥- 父类-

 @Entity
@Table(name = "PARENT")
public class Parent implements Serializable{

    private static final long             serialVersionUID     = 2232715856164345328L;

    private Long   id;

    private String first;

    private String second;

    private String third;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "parent_id")
    private List<Child> childEntities;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirst() {
        return first;
    }

    public void setFirst(String first) {
        this.first = first;
    }

    public String getSecond() {
        return second;
    }

    public void setSecond(String second) {
        this.second = second;
    }

    public String getThird() {
        return third;
    }

    public void setThird(String third) {
        this.third = third;
    }

    public List<Child> getChildEntities() {
        return childEntities;
    }

    public void setChildEntities(List<Child> childEntities) {
        this.childEntities = childEntities;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

}

我还有哪些选择?

您需要了解连接(顺便说一句,这也是您在SQL中使用的连接):


您需要了解连接(顺便说一句,这也是您在SQL中使用的连接):


这个答案不仅解决了我的问题,也澄清了我的疑问——“什么时候/为什么我需要加入Hibernate?”。这个答案不仅解决了我的问题,也澄清了我的疑问——“什么时候/为什么我需要加入Hibernate?”。
@Entity
@Table(name = "Child")
public class Child {

    private Long   id;

    private Integer number;

    private String prop1;

    private String prop2;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }

    public String getProp1() {
        return prop1;
    }

    public void setProp1(String prop1) {
        this.prop1 = prop1;
    }

    public String getProp2() {
        return prop2;
    }

    public void setProp2(String prop2) {
        this.prop2 = prop2;
    }
}
select count(c.id) from Parent p join p.childEntities c where p.id = :parentId