Nikolas,
Fair enough. From my understanding of these Externalizers, I would define
your UUID field as follows:
@Persistent
@Column(nullable=false)
@Externalizer("toString") // non-static method
@Factory("UUID.fromString") // static method
private UUID uuid;
OpenJPA should just use the UUID methods to go to and from the string
presentation. The @ElementType annotation should not be necessary since you
don't seem to be processing a Collection of UUIDs. These seem to be single
instances of UUIDs.
Have you tried this particular combination? I haven't made the connection
between these changes and your specific error message, but let's make sure
we're consistent with our understanding. Thanks.
Kevin
On Wed, Apr 30, 2008 at 2:09 PM, Nikolas Everett <[EMAIL PROTECTED]> wrote:
> Kevin,
>
> Thanks for getting back to me.
>
> Thats a cool generator. I might use that sometime. Unfortunately, the
> UUIDs are keys into another system. I'm just trying to get them to
> persist
> them into the database as string and load them into java as UUIDs.
>
> Thanks again,
>
> --Nik
>
> On Wed, Apr 30, 2008 at 2:57 PM, Kevin Sutter <[EMAIL PROTECTED]> wrote:
>
> > :-) Quiet doesn't mean we're not busy... :-)
> >
> > My first thought when I read your append is why are you not just using
> the
> > built-in UUID generator that OpenJPA provides? OpenJPA allows you to
> use
> > a
> > generator on non-id fields. We can either generate the UUID as a 16
> > character string or a 32 character hex value. Would this usage suffice
> > for
> > you, or do you have some other requirements for the use of the
> > externalizer?
> >
> > Here's a link to the documentation on the UUID generator:
> >
> >
> http://openjpa.apache.org/docs/latest/manual/manual.html#jpa_overview_meta_gen
> >
> > Kevin
> >
> > On Wed, Apr 30, 2008 at 9:49 AM, Nikolas Everett <[EMAIL PROTECTED]>
> > wrote:
> >
> > > I tried the attached message on the users list but didn't get any
> > > response.
> > > Will someone on the dev listserve help? I'm researching an ORM
> solution
> > > for
> > > our company, and can't in good conscience pick one with quiet
> listservs.
> > > Thanks,
> > >
> > > --Nik
> > >
> > > ---------- Forwarded message ----------
> > > From: Nikolas Everett <[EMAIL PROTECTED]>
> > > Date: Mon, Apr 28, 2008 at 5:20 PM
> > > Subject: UUIDs
> > > To: [EMAIL PROTECTED]
> > >
> > >
> > > I tried to search the archives and didn't find anything on this. I'm
> > > using
> > > openjpa 1.0.2 and having problems with UUIDs backed into postgres 8.2.
> > >
> > > I have a class like:
> > > @Entity
> > > @Table([EMAIL PROTECTED](columnNames="uuid")})
> > > public class Account {
> > > @Id
> > > @GeneratedValue(strategy=GenerationType.IDENTITY)
> > > private int id;
> > >
> > > @Persistent
> > > @Column(nullable=false)
> > > @Externalizer("java.util.UUID.toString")
> > > @Factory("java.util.UUID.fromString")
> > > @ElementType(UUID.class)
> > > private UUID uuid;
> > >
> > > ...getters and setters...
> > > }
> > >
> > > The uuid column is created as a character varying 255, which is fine
> for
> > > now.
> > >
> > > I have a method like this:
> > > protected Account getAccountByUuid(UUID uuid) {
> > > Query findAccount = this.em.createQuery("SELECT a FROM Account
> a
> > > WHERE a.uuid = ?1");
> > > findAccount.setParameter(1, uuid);
> > > try {
> > > return (Account) findAccount.getSingleResult();
> > > } catch (NoResultException e) {
> > > Account account = new Account();
> > > account.setUuid(uuid);
> > > this.em.persist(account);
> > > return account;
> > > }
> > > }
> > >
> > > Which throws an exception like this:
> > > Exception in thread "main" <openjpa-1.0.2-r420667:627158 nonfatal user
> > > error> org.apache.openjpa.persistence.ArgumentException: The parameter
> > "0"
> > > is of type "java.util.UUID", but the declaration in the query is for
> > type
> > > "java.lang.String".
> > > at
> > >
> > >
> >
> org.apache.openjpa.persistence.QueryImpl.validateParameter(QueryImpl.java:270)
> > > at
> > >
> > >
> >
> org.apache.openjpa.persistence.QueryImpl.validateParameters(QueryImpl.java:250)
> > > at
> > org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:231)
> > > at
> > >
> > >
> >
> org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:300)
> > > at com.companyname.Classname.getAccountByUuid(FetchData.java:73)
> > >
> > > This isn't the behavior documented here:
> > >
> > >
> >
> http://openjpa.apache.org/docs/latest/manual/ref_guide_pc_scos.html#d0e21916
> > >
> > > What can I do?
> > >
> > > Thanks in advance,
> > >
> > > --Nik
> > >
> >
>