Обсуждение: Java persistence with enum types

Поиск
Список
Период
Сортировка

Java persistence with enum types

От
Susannah Relf
Дата:
Hi, I have an enum type in my postgres 8.3 database:

CREATE TYPE typeOfNames AS ENUM ('Latin', 'Common', 'Local');

I am trying to access the database through the Java Persistence API using Netbeans:
    @Lob
    @Column(name = "typeofname")
    private String typeofname;

This works for reading from the database, but writing to it, I get the error message:
Caused by: org.postgresql.util.PSQLException: ERROR: column "typeofname" is of type typeofnames but expression is of type character varying

Anyone got any suggestions?

Thanks



Re: Java persistence with enum types

От
Craig Ringer
Дата:
Susannah Relf wrote:
> Hi, I have an enum type in my postgres 8.3 database:
>
> CREATE TYPE typeOfNames AS ENUM ('Latin', 'Common', 'Local');
>
> I am trying to access the database through the Java Persistence API using
> Netbeans:
>     @Lob
>     @Column(name = "typeofname")
>     private String typeofname;

One minute with Google:

@Enumerated
http://java.sun.com/javaee/5/docs/api/javax/persistence/Enumerated.html

http://forums.java.net/jive/thread.jspa?messageID=240608
http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#Enumerated
... etc ...

--
Craig Ringer

Re: Java persistence with enum types

От
Susannah
Дата:
Hi,

Thanks for trying to help Craig, but I had tried the @enumerated annotation
already with the same error message. The @enumerated annotation doesn't
return an enum type to Postgres, but instead returns the ordinal value (by
default) or a string value of the enum. This means I get either the error
message:

Caused by: org.postgresql.util.PSQLException: ERROR: column "typeofname" is
of type typeofnames but expression is of type character varying
(if I use enumtype STRING)

Or

Caused by: org.postgresql.util.PSQLException: ERROR: column "typeofname" is
of type typeofnames but expression is of integer



Craig Ringer wrote:
>
> Susannah Relf wrote:
>> Hi, I have an enum type in my postgres 8.3 database:
>>
>> CREATE TYPE typeOfNames AS ENUM ('Latin', 'Common', 'Local');
>>
>> I am trying to access the database through the Java Persistence API using
>> Netbeans:
>>     @Lob
>>     @Column(name = "typeofname")
>>     private String typeofname;
>
> One minute with Google:
>
> @Enumerated
> http://java.sun.com/javaee/5/docs/api/javax/persistence/Enumerated.html
>
> http://forums.java.net/jive/thread.jspa?messageID=240608
> http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#Enumerated
> ... etc ...
>
> --
> Craig Ringer
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>
>

--
View this message in context: http://www.nabble.com/Java-persistence-with-enum-types-tp23684815p23705886.html
Sent from the PostgreSQL - jdbc mailing list archive at Nabble.com.


Re: Java persistence with enum types

От
The Jasper
Дата:
On Mon, May 25, 2009 at 2:01 PM, Susannah <cyclingrelf@googlemail.com> wrote:
>
> Hi,
>
> Thanks for trying to help Craig, but I had tried the @enumerated annotation
> already with the same error message. The @enumerated annotation doesn't
> return an enum type to Postgres, but instead returns the ordinal value (by
> default) or a string value of the enum. This means I get either the error
> message:
>
> Caused by: org.postgresql.util.PSQLException: ERROR: column "typeofname" is
> of type typeofnames but expression is of type character varying
> (if I use enumtype STRING)
>
> Or
>
> Caused by: org.postgresql.util.PSQLException: ERROR: column "typeofname" is
> of type typeofnames but expression is of integer

I think you have the same problem I did a while back. A colleague of
mine figured it out. There is a partial answer here:
http://stackoverflow.com/questions/851758/java-enums-jpa-and-postgres-enums-how-do-i-make-them-work-together

Don't have time to dig up and clean up the actual code we use now but
I can if you'd like (and you're not in a hurry).

mvg,

Jasper
--
http://xkcd.com/583/