:-) 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 >
