[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| 
Re: AW: [eclipselink-users] @ElementCollection with @Embeddables
 | 
Hi Rafal,
  You may have to add a type to the JoinColumn, but aside from that, looks good.
  You should be able to build the bug using mostly cut and paste from this 
discussion.  I suggest simply cutting and pasting the following:
  The definition of the collection mapping and the definition of the Embeddable 
+ the generated DDL Code.
  If you have a recreation, that is always nice.  (I think you sent a project 
earlier)
-Tom
Swierzynski, Rafal wrote:
Hi Tom,
Thanks for looking into this.
Do you mean:
@CollectionTable(name = "SomeMap", joinColumns = JoinColumn(columnDefinition = "my DDL"))
?
As for the bug, is it ok to just link to this discussion after a brief description, or do you prefer that I repeat the whole problem in the bug body verbatim? What about the attachment?
Regards,
Rafał
-----Original Message-----
From: eclipselink-users-bounces@xxxxxxxxxxx [mailto:eclipselink-users-bounces@xxxxxxxxxxx] On Behalf Of Tom Ware
Sent: Monday, March 15, 2010 2:38 PM
Cc: EclipseLink User Discussions
Subject: Re: AW: [eclipselink-users] @ElementCollection with @Embeddables
Another workaround:
Explicitly add the joinColumn with the correct type to the annotation for the 
collecttion.
Tom Ware wrote:
Hi Rafal,
  Please enter a bug.  The issue is with our DDL generation.   The 
"SomeMap" table does not have the correct type for SomeENtity_ID.
  The workaround is to use our option of generating the DDL as a 
sql-script, then to edit the sql-script and run it against the DB.
-Tom
Swierzynski, Rafal wrote:
Hi Tom,
yes, I am using the auto generated DDL. The statements are (I omit 
drops and the sequence table):
CREATE TABLE SOMEENTITY (ID BIGINT NOT NULL, PRIMARY KEY (ID))
CREATE TABLE SomeMap (VALUE VARCHAR(255), KEY VARCHAR(255), 
SomeEntity_ID VARCHAR(255))
The insert statements are (after // is what gets bound to the 
parameters):
INSERT INTO SOMEENTITY (ID) VALUES (?) // bind => [1]
INSERT INTO SomeMap (SomeEntity_ID, VALUE, KEY) VALUES (?, ?, ?) // 
bind => [1, stół, pl]
INSERT INTO SomeMap (SomeEntity_ID, VALUE, KEY) VALUES (?, ?, ?) // 
bind => [1, table, en]
INSERT INTO SomeMap (SomeEntity_ID, VALUE, KEY) VALUES (?, ?, ?) // 
bind => [1, Tish, de]
And eventually, the selects:
SELECT ID FROM SOMEENTITY WHERE (ID = ?) // bind => [1]
SELECT VALUE, KEY FROM SomeMap WHERE (SomeEntity_ID = ?) // bind => [1]
And the last one results in this:
ERROR: operator does not exist: character varying = bigint
  Hint: No operator matches the given name and argument type(s). You 
might need to add explicit type casts.
'character varying' is the data type of the SomeMap.PERSON_ID column 
as reported by PGadmin, so it means it is the PostgreSQL name for 
VARCHAR.
In the DDL the SomeMap.SomeEntity_ID foreign key is of type VARCHAR 
whereas SomeEntity.id is BIGINT. I didn't think of looking in this 
direction, I thought my mapping was wrong, but I couldn't figure out 
what is wrong. We don't have such an issue as we don't use EL DDL in 
production.
I had a similar issue with Map collection.
Does this mean it is a EclipseLink DDL generation issue? If not, what 
else do I need to do to make this work?
Regards,
Rafał
________________________________________
Von: eclipselink-users-bounces@xxxxxxxxxxx 
[eclipselink-users-bounces@xxxxxxxxxxx] im Auftrag von Tom Ware 
[tom.ware@xxxxxxxxxx]
Gesendet: Freitag, 12. März 2010 16:39
An: EclipseLink User Discussions
Betreff: Re: [eclipselink-users] @ElementCollection with @Embeddables
Hi Rafal,
   What do the insert statements look like when the objects are inserted.
(persistence unit property eclipselink.logging.level=FINEST)?
   Are you using EclipseLink to gennerate DDL? What do the table creation
statements look like?
-Tom
Swierzynski, Rafal wrote:
Hi,
I have such collection mapping:
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "SomeMap")
private Set<Pair> someSet = new HashSet<Pair>();
with Pair being defined as:
@Embeddable
public class Pair {
    private String key;
    private String value;
    public Pair(String key, String value) {
        this.key = key;
        this.value = value;
    }
    protected Pair() {
    }
    public String getKey() {
        return key;
    }
    public String getValue() {
        return value;
    }
}
The code to persist is as follows:
EntityManagerFactory emf = 
Persistence.createEntityManagerFactory("TestJPA");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
SomeEntity s = new SomeEntity();
s.put("en", "table");
s.put("de", "Tish");
s.put("pl", "stół");
em.persist(s);
tx.commit();
em.clear();
s = em.find(SomeEntity.class, s.getId());
The entity is persisted in the database in the first transaction. 
However, when the entity is read again, I get:
Exception in thread "main" Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 
2.0.0.v20091127-r5931): 
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: 
operator does not exist: character varying = bigint
  Hint: No operator matches the given name and argument type(s). You 
might need to add explicit type casts.
  Position: 53
Error Code: 0
Call: SELECT VALUE, KEY FROM SomeMap WHERE (SomeEntity_ID = ?)
      bind => [1]
Query: ReadAllQuery(name="someSet" referenceClass=Pair sql="SELECT 
VALUE, KEY FROM SomeMap WHERE (SomeEntity_ID = ?)")
When I looked into the generated table for the collection, I noticed 
that SomeEntity_ID is of type "character varying".
What am I doing wrong here?
A project is attached to this email with the whole source code.
Regards,
Rafał
------------------------------------------------------------------------
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users