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

Reply via email to