2011-02-02 6 views
3

のメンバーでは動作しません。基本的に私は仕事を拒否し、「findServerWithNicは」名前付きクエリを持っています:JPA 2「のメンバーは、」スーパー

@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; 
    } 
} 

は、今私は、NICのインスタンスaがServerインスタンスに追加作成したテストケースを持っている(s.getNics()私がチェックし、インスタンスを含む)が、クエリの呼び出し

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) 

で0

結果は、元々のNIC-メンバーは、プライベートでしたが、でもうまくいきませんでした保護に設定します。 JPA 2プロバイダーとしてeclipselink 2.2.0-M4を使用しています。これはeclipselinkバグですか、それともクエリーが間違っていますか?

+0

することができますSQLロギングを有効にし、結果のSQL(http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging)を参照してください – axtavt

+0

手動SQLクエリで成功しましたか? –

答えて

2

トランザクションをコミットまたはフラッシュしましたか?そうしなかった場合、データベースは(フラッシュモードによって)値を持たないかもしれないので、クエリは何も返しません。

ロギングを有効にし、SQLをインクルードします。 SQLが正しい場合は?

generaly古いJPQL構文で、通常は "参加" "のメンバーは、" "サーバーの参加s.micsからのN WHERE n.id = Sを選択:nicId"

代わりに使用されるようになりました