I am investigating upgrading our system from 1.0.2 to 2.0.1. I have
come across the whole getResultList as List<Object[]> instead of
the old List<List<Object>> deal. The issue I now have is
where named queries are failing, for example:
@NamedQuery(name = "Recording.findById", query = "SELECT r FROM
Recording r WHERE r.id = :id")
Target Invocation Exception: Exception [EclipseLink-8030] (Eclipse
Persistence Services - 2.0.1.v20100213-r6600):
org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [Recording.findById:
SELECT r FROM Recording r WHERE r.id = :id], line 1, column 37: unknown
state or association field [id] of class [xxx.entities.Recording].
Descriptor: RelationalDescriptor(xxx.entities.Recording -->
[DatabaseTable(recordings)])
This is the most basic of my named queries and it still happens. Again,
this all worked fine in 1.0.2.
I don't get problems if I pare it back to:
[Recording.findAll: SELECT r FROM Recording r]
But do with:
[Recording.findAll: SELECT r FROM Recording r ORDER BY r.id]
It seems it doesn't want to recognise my fields. Interestingly it
doesn't seem to be happening with any of my other entities. This one is
defined about the middle of my persistence.xml file, so it's not the
first one hit. Here's relevant sections of the Recording class, also
showing most of the NamedQueries commented out as I try to sort this
out:
@Entity
@Table(name = "recordings")
@NamedQueries( { @NamedQuery(name = "Recording.findAll", query =
"SELECT r FROM Recording r ORDER BY r.id")
// @NamedQuery(name = "Recording.findById", query =
// "SELECT r FROM Recording r WHERE r.id = :id"),
// @NamedQuery(name = "Recording.findByListened", query =
// "SELECT r FROM Recording r WHERE r.listened = :listened ORDER BY
r.date, r.time"),
// @NamedQuery(name = "Recording.findForDate", query =
// "SELECT r FROM Recording r WHERE r.date = :date ORDER BY r.date,
r.time"),
// @NamedQuery(name = "Recording.findForDateRange", query =
// "SELECT r FROM Recording r WHERE r.date BETWEEN :date AND :toDate
ORDER BY r.date, r.time"),
// @NamedQuery(name = "Recording.findForDateWhereUnlistened", query =
// "SELECT r FROM Recording r WHERE r.date = :date and r.listened =
false ORDER BY r.date, r.time"),
// @NamedQuery(name = "Recording.findForDateRangeWhereUnlistened",
query =
// "SELECT r FROM Recording r WHERE r.'date BETWEEN :date AND :toDate
and r.listened = false ORDER BY r.date, r.time"),
// @NamedQuery(name = "Recording.findForDateWithEvent", query =
// "SELECT r FROM Recording r WHERE r.date = :date and r.event is not
null ORDER BY r.date, r.time"),
// @NamedQuery(name = "Recording.findUnlistened", query =
// "SELECT r FROM Recording r WHERE r.listened = false ORDER BY r.date,
r.time"),
// @NamedQuery(name = "Recording.findOldestUnlistenedDate", query =
// "SELECT r.date FROM Recording r WHERE r.listened = false ORDER BY
r.date, r.time")
})
public class Recording implements Serializable {
private static final DateFormat TIME_FORMAT = new
SimpleDateFormat("HH:mm:ss");
private static final DateFormat DATE_FORMAT =
DateFormat.getDateInstance(DateFormat.SHORT);
public enum RecordingFilter {
ALL, UNLISTENED, WITH_EVENT;
}
private static DayNightDecider dayNightDecider;
@Transient
private final PropertyChangeSupport changeSupport = new
PropertyChangeSupport(this);
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id", updatable = false)
private Integer id;
@Basic(optional = false)
@Column(name = "time", updatable = false)
@Temporal(TemporalType.TIME)
private Date time;
@Basic(optional = false)
@Column(name = "date", updatable = false)
@Temporal(TemporalType.DATE)
private Date date;
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "recording", updatable = false)
private byte[] recording;
@Basic(optional = false)
@Column(name = "listened")
private boolean listened;
@Basic(optional = false)
@Column(name = "format_id", updatable = false)
private int formatId;
@Basic
@Column(name = "comment")
private String comment;
@OneToOne(mappedBy = "recording", cascade = CascadeType.ALL)
private Event event;
@Transient
private Boolean night;
Thanks in advance
Brad
|