В основном у меня есть именованный запрос "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
{...}
nics не определен на сервере, но в его суперклассе 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;
}
}
теперь у менятестовый сценарий, который создает экземпляры Nic и добавляет его к экземпляру сервера (s.getNics () содержит экземпляр, я проверил), но вызов запроса
public Server findVirtualServerOfNic(Long nicId) {
final Server network = em.createNamedQuery("findServerWithNic", Server.class)
.setParameter("nicId", nicId)
.getSingleResult();
return network;
}
приводит к исключению 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)
Первоначально член nics был закрытым, но даже установка его в защищенный не работала.Мы используем eclipselink 2.2.0-M4 в качестве нашего JPA 2-провайдера.Это ошибка eclipselink или запрос неправильный?