2012-03-18 126 views
0

我已将我的第一个OneToMany关系添加到我的hibernate 3.6.10项目。这里是一个类:无节点数据类型:

/** 
* 
*/ 
package com.heavyweightsoftware.leal.model.schedule; 

import java.util.Collection; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

import com.heavyweightsoftware.leal.helper.DateHelper; 
import com.heavyweightsoftware.leal.model.Pojo; 

/** 
* A particular collection of events that can be shared 
* @author Thom 
*/ 
@Entity 
@Table(name = "SCHEDULE") 
@NamedQueries({ 
    @NamedQuery(name = Schedule.COUNT_SCHED_ID,  query = "SELECT COUNT(*) " + 
                   "FROM Schedule s " + 
                   "WHERE s.scheduleId = :scheduleId"), 
    @NamedQuery(name = Schedule.COUNT_SCHED_NAME, query = "SELECT COUNT(*) " + 
                   "FROM ScheduleRole r, Schedule s, SystemUser u " + 
                   "WHERE u.email = :email " + 
                   " AND u.id = r.systemUserId " + 
                   " AND r.scheduleId = s.id " + 
                   " AND s.name = :scheduleName "), 
    @NamedQuery(name = Schedule.QUERY_EVENTS_BY_USER, query = "SELECT r.roleType, s,e " + 
                   "FROM Schedule s, ScheduleRole r, SystemUser u " + 
                   "WHERE u.email = :email " + 
                   " AND u.id = r.systemUserId " + 
                   " AND r.scheduleId = s.id " + 
                   " ") 
    } 
) 
public class Schedule extends Pojo { 

    public static final int  LENGTH_SCHEDULE_ID  = 32; 
    public static final String  COUNT_SCHED_ID   = "countScheduleId"; 
    public static final String  COUNT_SCHED_NAME   = "countScheduleName"; 
    public static final String  QUERY_EVENTS_BY_USER  = "findEventsByUser"; 

    @Column(name = "ID", nullable=false) 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer  id; 

    @Column(name = "NAME", nullable=false) 
    private String  name; 

    @Column(name = "SCHEDULE_ID", nullable=false, unique=true, length=LENGTH_SCHEDULE_ID) 
    private String  scheduleId; 

    @OneToMany(cascade = CascadeType.ALL) 
    private Collection<Event> events; 

    /* (non-Javadoc) 
    * @see com.heavyweightsoftware.leal.model.Pojo#toString() 
    */ 
    @Override 
    public String toString() { 
     StringBuilder sb = new StringBuilder(super.toString()); 
     sb.append('|'); 
     sb.append(getName()); 
     sb.append('|'); 
     sb.append(getScheduleId()); 
     return sb.toString(); 
    } 

    /* (non-Javadoc) 
    * @see java.lang.Object#hashCode() 
    */ 
    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = super.hashCode(); 
     result = prime * result + ((id == null) ? 0 : id.hashCode()); 
     result = prime * result + ((name == null) ? 0 : name.hashCode()); 
     result = prime * result 
       + ((scheduleId == null) ? 0 : scheduleId.hashCode()); 
     return result; 
    } 

    /* (non-Javadoc) 
    * @see java.lang.Object#equals(java.lang.Object) 
    */ 
    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (!super.equals(obj)) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     Schedule other = (Schedule) obj; 
     if (id == null) { 
      if (other.id != null) 
       return false; 
     } else if (!id.equals(other.id)) 
      return false; 
     if (name == null) { 
      if (other.name != null) 
       return false; 
     } else if (!name.equals(other.name)) 
      return false; 
     if (scheduleId == null) { 
      if (other.scheduleId != null) 
       return false; 
     } else if (!scheduleId.equals(other.scheduleId)) 
      return false; 
     return true; 
    } 

    /** 
    * @return the id 
    */ 
    public final Integer getId() { 
     return id; 
    } 

    /** 
    * @param id the id to set 
    */ 
    public final void setId(Integer id) { 
     this.id = id; 
    } 

    /** 
    * @return the name 
    */ 
    public final String getName() { 
     return name; 
    } 

    /** 
    * @param name the name to set 
    */ 
    public final void setName(String name) { 
     this.name = name; 
    } 

    /** 
    * @return 
    */ 
    public String getScheduleId() { 
     return scheduleId == null?scheduleId = DateHelper.getUniqueID():scheduleId; 
    } 

    /** 
    * @param scheduleId 
    */ 
    public void setScheduleId(String scheduleId) { 
     this.scheduleId = scheduleId; 
    } 

    /** 
    * @return the events 
    */ 
    public Collection<Event> getEvents() { 
     return events; 
    } 

    /** 
    * @param events the events to set 
    */ 
    public void setEvents(Collection<Event> events) { 
     this.events = events; 
    } 
} 

这里是许多类:

/** 
* 
*/ 
package com.heavyweightsoftware.leal.model.schedule; 

import java.util.Calendar; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.NamedQueries; 
import javax.persistence.Table; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

import com.heavyweightsoftware.leal.model.Pojo; 

/** 
* A particular event entry in a calendar 
* @author Thom 
*/ 
@Entity 
@Table(name = "EVENT") 
@NamedQueries({ 
    } 
) 
public class Event extends Pojo { 

    /** 
    * Length of the randomly generated event ID 
    */ 
    private static final int   LENGTH_EVENT_ID    = 32; 

    @Column(name = "ID", nullable=false) 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer  id; 

    @Column(name = "START_TIME") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Calendar start; 

    @Column(name = "END_TIME") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Calendar end; 

    @Column(name = "EVENT_NAME", nullable=false) 
    private String  eventName; 

    @Column(name = "EVENT_ID", nullable=false, unique=true, length=LENGTH_EVENT_ID) 
    private String  eventId; 

    @Column(name = "SCHEDULE_ID", nullable=false) 
    private Integer  scheduleId; 

    @Column(name = "LOCATION") 
    private String  location; 

    /* (non-Javadoc) 
    * @see java.lang.Object#hashCode() 
    */ 
    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = super.hashCode(); 
     result = prime * result + ((end == null) ? 0 : end.hashCode()); 
     result = prime * result 
       + ((eventName == null) ? 0 : eventName.hashCode()); 
     result = prime * result + ((id == null) ? 0 : id.hashCode()); 
     result = prime * result 
       + ((location == null) ? 0 : location.hashCode()); 
     result = prime * result 
       + ((scheduleId == null) ? 0 : scheduleId.hashCode()); 
     result = prime * result + ((start == null) ? 0 : start.hashCode()); 
     return result; 
    } 

    /* (non-Javadoc) 
    * @see java.lang.Object#equals(java.lang.Object) 
    */ 
    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (!super.equals(obj)) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     Event other = (Event) obj; 
     if (end == null) { 
      if (other.end != null) 
       return false; 
     } else if (!end.equals(other.end)) 
      return false; 
     if (eventName == null) { 
      if (other.eventName != null) 
       return false; 
     } else if (!eventName.equals(other.eventName)) 
      return false; 
     if (id == null) { 
      if (other.id != null) 
       return false; 
     } else if (!id.equals(other.id)) 
      return false; 
     if (location == null) { 
      if (other.location != null) 
       return false; 
     } else if (!location.equals(other.location)) 
      return false; 
     if (scheduleId == null) { 
      if (other.scheduleId != null) 
       return false; 
     } else if (!scheduleId.equals(other.scheduleId)) 
      return false; 
     if (start == null) { 
      if (other.start != null) 
       return false; 
     } else if (!start.equals(other.start)) 
      return false; 
     return true; 
    } 

    /* (non-Javadoc) 
    * @see com.heavyweightsoftware.leal.model.Pojo#toString() 
    */ 
    @Override 
    public String toString() { 
     StringBuilder sb = new StringBuilder(super.toString()); 
     sb.append('|'); 
     sb.append(getEventName()); 
     sb.append('|'); 
     sb.append(getTimestamp(getStart())); 
     sb.append('-'); 
     sb.append(getTimestamp(getEnd())); 
     sb.append("|scheduleId="); 
     sb.append(getScheduleId()); 
     sb.append('|'); 
     sb.append(getLocation()); 
     return sb.toString(); 
    } 

    /** 
    * @return the id 
    */ 
    public final Integer getId() { 
     return id; 
    } 

    /** 
    * @param id the id to set 
    */ 
    public final void setId(Integer id) { 
     this.id = id; 
    } 

    /** 
    * The start date of the event in UTC 
    * @return the start 
    */ 
    public final Calendar getStart() { 
     return start; 
    } 

    /** 
    * The start date of the event in UTC 
    * @param start the start to set 
    */ 
    public final void setStart(Calendar start) { 
     this.start = start; 
    } 

    /** 
    * The end date of the event in UTC 
    * @return the end 
    */ 
    public final Calendar getEnd() { 
     return end; 
    } 

    /** 
    * The end date of the event in UTC 
    * @param end the end to set 
    */ 
    public final void setEnd(Calendar end) { 
     this.end = end; 
    } 

    /** 
    * @return the eventId 
    */ 
    public String getEventId() { 
     return eventId; 
    } 

    /** 
    * @param eventId the eventId to set 
    */ 
    public void setEventId(String eventId) { 
     this.eventId = eventId; 
    } 

    /** 
    * @return the eventName 
    */ 
    public final String getEventName() { 
     return eventName; 
    } 

    /** 
    * @param eventName the eventName to set 
    */ 
    public final void setEventName(String eventName) { 
     this.eventName = eventName; 
    } 

    /** 
    * @return the location 
    */ 
    public final String getLocation() { 
     return location; 
    } 

    /** 
    * @param location the location to set 
    */ 
    public final void setLocation(String location) { 
     this.location = location; 
    } 

    /** 
    * @return the scheduleId 
    */ 
    public Integer getScheduleId() { 
     return scheduleId; 
    } 

    /** 
    * @param scheduleId the scheduleId to set 
    */ 
    public void setScheduleId(Integer scheduleId) { 
     this.scheduleId = scheduleId; 
    } 
} 

我有这我终于理顺了一些路径的问题。然后我得到一个新的错误。

所致:java.lang.IllegalStateException:对于节点没有任何数据类型:org.hibernate.hql.ast.tree.IdentNode - [IDENT] IdentNode: 'e' 的{originalText = E}

有没有这个错误的位置,我不知道下一步该去哪里。

回答

2

在命名查询有E(SELECT r.roleType,S,E),但其并不清楚其中的参考:

@NamedQuery(name = Schedule.QUERY_EVENTS_BY_USER, query = "SELECT r.roleType, s,e " + 
                   "FROM Schedule s, ScheduleRole r, SystemUser u " + 
                   "WHERE u.email = :email " + 
                   " AND u.id = r.systemUserId " + 
                   " AND r.scheduleId = s.id " + 
                   " ") 
+0

我在nHibernate中得到了同样的问题,我只从一个表中选择,但select中的一个列名也恰好是另一个nHibernate表的名称。 – row1 2013-05-13 08:00:40

0

我会走出去,猜测你忘了HQL中的新关键字。

+0

嗯...大概。什么新的关键字? – Thom 2012-03-18 16:53:48

+0

你可以粘贴全班吗? – 2012-03-18 17:10:41

+0

编辑添加涉及的两个类。 – Thom 2012-03-18 17:14:32

相关问题