BUG #7734: JPA2/Hibernate4 PG enum insert causes exception

From: rmitchell(at)bzzagent(dot)com
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #7734: JPA2/Hibernate4 PG enum insert causes exception
Date: 2012-12-05 20:54:44
Message-ID: E1TgLzQ-0003hz-Gg@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 7734
Logged by: Rob Mitchell
Email address: rmitchell(at)bzzagent(dot)com
PostgreSQL version: 9.1.4
Operating system: MacOS X 10.7
Description:

[1] Database script

create type GENDER_ENUM as enum ('male', 'female', 'unknown');
create sequence my_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647 START 1;
create table my_table (
id integer NOT NULL DEFAULT nextval('my_seq'),
gender_type GENDER_ENUM NOT NULL,

CONSTRAINT my_table_pkey PRIMARY KEY(id)
);

insert into my_table (gender) values ('male');
insert into my_table (gender) values ('female');
insert into my_table (gender) values ('unknown');

[2] Persistence.xml file

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" >

<persistence-unit name="MyPersistenceUnit"
transaction-type="RESOURCE_LOCAL">
<description>Persistence unit</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="javax.persistence.jdbc.driver"
value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:postgresql://localhost:5432/mydb" />
<property name="javax.persistence.jdbc.user" value="user" />
<property name="javax.persistence.jdbc.password"
value="password" />

<property name="hibernate.hbm2ddl.auto" value="validate"/>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
<property name="prefer_sequence_per_entity" value="true" />
</properties>
</persistence-unit>
</persistence>

[3] Entity code

package com.mypackage;

import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Transient;

@Entity(name="my_table")
public class MyTable {

@SequenceGenerator(name="generatorMySeq", sequenceName="my_seq",
allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
"generatorMySeq")
@Id
@Column(name = "id")
private long id;

@Enumerated(EnumType.STRING)
@Column(name="gender_type", columnDefinition="GENDER_ENUM")
private GenderEnum gender;

// getters and setters
}

[4] My Java enumerated type

public enum GenderEnum {
male, female, unknown;
}

[5] JUnit test

public class Test_MyTable {

@Test
public void test_1() {
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("MyPersistenceUnit");
EntityManager em = emf.createEntityManager();

MyTable myTable = new MyTable();
myTable.setGender(GenderEnum.male);

em.getTransaction().begin();
em.persist(ac);
em.getTransaction().commit();

em.close();
emf.close();
}
}

[6] Exception

The exception is:

Caused by: org.postgresql.util.PSQLException: ERROR: column “gender_type” is
of type GENDER_ENUM but expression is of type character varying
Hint: You will need to rewrite or cast the expression.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2012-12-05 21:15:38 Re: PITR potentially broken in 9.2
Previous Message p.elagin 2012-12-05 19:47:27 BUG #7733: support Retina display in pgAdmin