Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
JPA2“member of”语法不适用于超类的成员_Jpa_Eclipselink_Jpa 2.0_Jpql - Fatal编程技术网

JPA2“member of”语法不适用于超类的成员

JPA2“member of”语法不适用于超类的成员,jpa,eclipselink,jpa-2.0,jpql,Jpa,Eclipselink,Jpa 2.0,Jpql,基本上,我有一个命名查询findServerWithNic,它拒绝工作: @Entity @Table(name = "vnm_server") @DiscriminatorValue("S") @NamedQueries({ @NamedQuery( name="findServerWithNic", query="SELECT s FROM Server s, Nic n "+ "WHERE n.id = :nicId

基本上,我有一个命名查询findServerWithNic,它拒绝工作:

@Entity
@Table(name = "vnm_server")
@DiscriminatorValue("S")
@NamedQueries({
    @NamedQuery(
        name="findServerWithNic",
        query="SELECT s FROM Server s, Nic n "+
                "WHERE n.id = :nicId AND n member of s.nics"
    )
})
public class Server extends NetworkedDevice implements Serializable
{...}
NIC未在服务器中定义,但在其超类NetworkedDevice中定义:

@Entity
@Table(name = "vnm_networked_device")
@DiscriminatorColumn(name = "c_device_type", discriminatorType = DiscriminatorType.CHAR)
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class NetworkedDevice extends AbstractIdentifyable implements Serializable
{
    @OneToMany(mappedBy = "connectedHost", cascade = CascadeType.ALL)
    @OrderColumn(name = "c_index")
    protected List<Nic> nics = new ArrayList<Nic>();

    public List<Nic> getNics() {
        return nics;
    }

    public void setNics(List<Nic> nics) {
        this.nics = nics;
    }
}
导致NoResultException异常

Caused by: javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.throwNoResultException(EJBQueryImpl.java:1246)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:750)
    at com.profitbricks.provisioning.vnm.jpa.impl.VNManagementJPAImpl.findVirtualServerOfNic(VNManagementJPAImpl.java:101)
最初,NIC成员是私有的,但即使将其设置为protected也不起作用。
我们使用eclipselink 2.2.0-M4作为我们的JPA 2-provider。这是eclipselink错误还是查询错误?

您是否提交或刷新了事务?如果没有,则根据刷新模式,数据库可能没有该值,因此查询不会返回任何内容

启用日志记录并包含SQL。SQL语句是否正确

的成员通常是旧的JPQL语法,现在通常使用join


选择s FROM Server s join s.mics n其中n.id=:nicId

您可以尝试启用SQL日志记录并查看结果SQL手动SQL查询是否成功?
Caused by: javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.throwNoResultException(EJBQueryImpl.java:1246)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:750)
    at com.profitbricks.provisioning.vnm.jpa.impl.VNManagementJPAImpl.findVirtualServerOfNic(VNManagementJPAImpl.java:101)