2015-06-01 3 views
2

У меня есть таблица в базе данных с этих столбцов:NamedQuery resultList возвращать объекты, но все значения равны нулю

id serial NOT NULL, 
    name character varying(255) NOT NULL, 
    url character varying(255) 

лица:

@Entity 
    @Table(name = "Topmenu") 
    @XmlRootElement 
    @NamedQueries({ 
     @NamedQuery(name = "Topmenu.findAll", query = "SELECT t FROM Topmenu t"), 
     @NamedQuery(name = "Topmenu.findById", query = "SELECT t FROM Topmenu t WHERE t.id = :id")}) 
    public class Topmenu implements Serializable { 

     private static final long serialVersionUID = 1L; 
     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     @Basic(optional = false) 
     @Column(name = "id") 
     private Integer id; 
     @Basic(optional = false) 
     @Column(name = "name") 
     private String name; 
     @Column(name = "url") 
     private String url; 

     public Topmenu() { 
     } 

     public Topmenu(Integer id) { 
      this.id = id; 
     } 

     public Topmenu(Integer id, String name) { 
      this.id = id; 
      this.name = name; 
     } 

     public Integer getId() { 
      return id; 
     } 

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

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 

     public String getUrl() { 
      return url; 
     } 

     public void setUrl(String url) { 
      this.url = url; 
     } 

     @Override 
     public int hashCode() { 
      int hash = 0; 
      hash += (id != null ? id.hashCode() : 0); 
      return hash; 
     } 

     @Override 
     public boolean equals(Object object) { 
      // TODO: Warning - this method won't work in the case the id fields are not set 
      if(!(object instanceof Topmenu)) { 
       return false; 
      } 
      Topmenu other = (Topmenu) object; 
      return !((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))); 
     } 

     @Override 
     public String toString() { 
      return "erates.entity.Topmenu[ id=" + id + " ]"; 
     } 
} 

Netbeans сгенерировал JPA Entity для меня. У меня есть 5 записей в базе данных. Когда я em.createNamedQuery("Topmenu.findAll").getResultList(); я получаю List<Topmenu> с 5 записей, но когда я делаю следующее, ничего не возвращается:

for(Topmenu t : em.createNamedQuery("Topmenu.findAll").getResultList()){ 
    logger.warn(t.getName()); 
} 

именемполе запрос:

@NamedQuery(name = "Topmenu.findAll", query = "Topmenu t FROM Topmenu t") 

Выход:

2015-06-01 11:23:27,024 WARN erates.beans.TopmenuBean (TopmenuBean.java:33) - 
2015-06-01 11:23:27,034 WARN erates.beans.TopmenuBean (TopmenuBean.java:33) - 
2015-06-01 11:23:27,045 WARN erates.beans.TopmenuBean (TopmenuBean.java:33) - 
2015-06-01 11:23:27,055 WARN erates.beans.TopmenuBean (TopmenuBean.java:33) - 
2015-06-01 11:23:27,066 WARN erates.beans.TopmenuBean (TopmenuBean.java:33) - 
+0

Являются ли имена в базе данных пустыми или имеют какие-то значения? –

+0

@PredragMaric У них есть значения – Erates

+0

Пожалуйста, добавьте свой NamedQuery в вопрос ... – unwichtich

ответ

0

По моему опыту, некоторые проблемы возникают, когда вы не используете TypedQueries и нуждаетесь в них.

Попробуйте код с

for(Topmenu t : em.createNamedQuery("Topmenu.findAll", Topmenu.class).getResultList()){ 
    logger.warn(t.getName()); 
} 

С дополнительным параметром, то createNamedQuery возвращает TypedQuery вместо запроса.

Позвольте мне знать, если это помогает :)

0

Это не имеет ничего общего с юридическими лицами или EntityManager, но с тем, что EclipseLink было ткачество. Я забыл одну деталь, поскольку EJB, получающий Entities, был Remote EJB. Таким образом, были ошибки при сериализации объектов, в результате чего TopmenuBean получал объекты, но не смог их десериализовать.

Проблема решена сейчас