Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: AW: [eclipselink-users] questiona about JPQL and Collections

Try calling readAllQuery.dontUseDistinct().

-Tom

Daniel.Stucky@xxxxxxxxxxx wrote:
Hi Tom,

thanks for your help, in general it works as described by you.

However, I forgot to include the following member of RecordDao in the sample code:
  @Column(name = "RECORD")
  private byte[] _serializedRecord;

The generated SQL query contains DISTINCT, which is not usable with queries containing BLOBs.
Any suggestions how to handle this ?


Bye,
Daniel

-----Urspr√ľngliche Nachricht-----
Von: eclipselink-users-bounces@xxxxxxxxxxx [mailto:eclipselink-users-
bounces@xxxxxxxxxxx] Im Auftrag von Tom Ware
Gesendet: Mittwoch, 28. Januar 2009 21:12
An: EclipseLink User Discussions
Betreff: Re: [eclipselink-users] questiona about JPQL and Collections

Hi Daniel,

   Because BasicCollection is not a part of the JPA specification yet,
JPQL
cannot currently query across BasicCollections.  (That behavior is
expected in
the upcoming JPA 2.0 specification)

   To access a BasicCollection in a query, you will have to use
EclipseLink's
criteria API instead.

   Your code will look something like this:

ReadAllQuery query = new ReadAllQuery(RecordDAO.class);
ExpressionBuilder record = new ExpressionBuilder();
Expression attributes = record.anyOfAttributes("attributes");
Expresion criteria =
attributes.get("_name").equal(record.getParameter("name"));
criteria =
criteria.and(attributes.anyOf("_values").equal(record.getParameter("val
ue")))
query.setSelectionCriteria(criteria);

This query can be added as a named query through a SessionCustomizer by
calling
the addQuery(name, query) method.

   That is the basics of how it should look.  With a little massaging
of the
code, it should be possible to use this query just like any other named
query in
JPA.

BTW: Here is the Customizer doc:

http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_%28ELUG%29#Usi
ng_EclipseLink_JPA_Extensions_for_Customization_and_Optimization

-Tom




Daniel.Stucky@xxxxxxxxxxx wrote:
Hi all,

given the following Entities, how can I express a named query that
selects all Records where AttributeDao._name = "X" and
AttributeDao._values.contains("Y")


@Entity
@Table(name = "RECORDS")
public class RecordDao implements Serializable {

  @Id
  @Column(name = "ID")
  private String _idString;

  @Column(name = "SOURCE")
  private String _source;
...
}

@Entity
@Table(name = "ATTRIBUTES")
public class AttributeDao {

  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  @Column(name = "ATT_ID")
  private String _id;

  @Column(name = "ATT_NAME")
  private String _name;

  @BasicCollection (
    fetch=FetchType.EAGER,
    valueColumn=@Column(name="ATT_VALUE"))
    @CollectionTable (
        name="ATTRIBUTE_VALUES",
        primaryKeyJoinColumns=
        {@PrimaryKeyJoinColumn(name="ATT_ID",
referencedColumnName="ATT_ID")}
    )
  private List<String> _values;
...
}



I tried something like this

@NamedQueries({
    @NamedQuery(name="RecordDao.findByAttribute",
      query="SELECT DISTINCT r FROM RecordDao r JOIN r._attributes a
JOIN a._values v WHERE a._name = :name AND v._values = :value")

})


but during EntityManager creation I get the following error:

Exception [EclipseLink-8030] (Eclipse Persistence Services - 1.0.2
(Build 20081024)): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query
[RecordDao.findByAttribute: SELECT DISTINCT r FROM RecordDao r JOIN
r._attributes a JOIN a._values v WHERE a._name = :name AND v._values
=
:value], line 1, column 63: unknown state or association field
[_values]
of class [org.eclipse.smila.datamodel.persistence.AttributeDao].


I expect the syntax for "AND v._values = :value" to be not valid, but
I
wonder why it complains about JOIN a._values v.
Anyone any ideas/suggestions ?


Bye,
Daniel
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users


Back to the top