Home » Eclipse Projects » EclipseLink » unidirectional ManyToMany with an order?
|
Re: unidirectional ManyToMany with an order? [message #540364 is a reply to message #540351] |
Tue, 15 June 2010 19:55 |
Lars Fischer Messages: 105 Registered: July 2009 |
Senior Member |
|
|
On 15.06.2010 20:59, Lars Fischer wrote:
>
> I would like to use a unidirectional ManyToMany with an order and don't
> know how to do this. My classes look like this:
>
> - A simple class Item, which has no knowledge of groups.
> - A class Group, which has an ordered collection of items.
> - The order depends not on a field of the items! Every group has a
> special order of the items.
> - One Item could be contained in many different groups.
>
> I would be very happy, if someone could give me a hint, how to map this.
I tried to use this in the Group class:
@ManyToMany
@JoinTable(name = "GROUP_ITEM", joinColumns = @JoinColumn(name =
"GROUP_ID"), inverseJoinColumns = @JoinColumn(name = "ITEM_ID"))
@MapKeyColumn(name = "ORDER")
private Map<Integer, Item> items;
But eclipselink throws an error when creating the table GROUP_ITEM:
[EL Fine]: Connection(24548764)--CREATE TABLE GROUP_ITEM (GROUP_ID
BIGINT NOT NULL, ITEM_ID BIGINT NOT NULL, ORDER VARCHAR, PRIMARY KEY
(GROUP_ID, ITEM_ID))
[EL Fine]: SELECT 1
[EL Warning]: Exception [EclipseLink-4002] (Eclipse Persistence Services
- 2.0.1.v20100213-r6600):
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLException: Syntax Fehler in SQL
Befehl "CREATE TABLE GROUP_ITEM (GROUP_ID BIGINT NOT NULL, ITEM_ID
BIGINT NOT NULL, ORDER[*] VARCHAR, PRIMARY KEY (GROUP_ID, ITEM_ID))";
erwartet "identifier"
Syntax error in SQL statement "CREATE TABLE GROUP_ITEM (GROUP_ID BIGINT
NOT NULL, ITEM_ID BIGINT NOT NULL, ORDER[*] VARCHAR, PRIMARY KEY
(GROUP_ID, ITEM_ID))"; expected "identifier"; SQL statement:
CREATE TABLE GROUP_ITEM (GROUP_ID BIGINT NOT NULL, ITEM_ID BIGINT NOT
NULL, ORDER VARCHAR, PRIMARY KEY (GROUP_ID, ITEM_ID)) [42001-133]
at org.h2.message.DbException.getJdbcSQLException(DbException.j ava:316)
at org.h2.message.DbException.get(DbException.java:167)
at org.h2.message.DbException.getSyntaxError(DbException.java:1 92)
at org.h2.command.Parser.readColumnIdentifier(Parser.java:2538)
at org.h2.command.Parser.parseCreateTable(Parser.java:4718)
at org.h2.command.Parser.parseCreate(Parser.java:3516)
at org.h2.command.Parser.parsePrepared(Parser.java:314)
at org.h2.command.Parser.parse(Parser.java:278)
at org.h2.command.Parser.parse(Parser.java:250)
at org.h2.command.Parser.prepareCommand(Parser.java:222)
at org.h2.engine.Session.prepareLocal(Session.java:420)
at org.h2.server.TcpServerThread.process(TcpServerThread.java:2 23)
at org.h2.server.TcpServerThread.run(TcpServerThread.java:134)
at java.lang.Thread.run(Thread.java:619)
Error Code: 42001
Call: CREATE TABLE GROUP_ITEM (GROUP_ID BIGINT NOT NULL, ITEM_ID BIGINT
NOT NULL, ORDER VARCHAR, PRIMARY KEY (GROUP_ID, ITEM_ID))
Query: DataModifyQuery(sql="CREATE TABLE GROUP_ITEM (GROUP_ID BIGINT NOT
NULL, ITEM_ID BIGINT NOT NULL, ORDER VARCHAR, PRIMARY KEY (GROUP_ID,
ITEM_ID))")
What is wrong with my mapping? Can I only use String as MapKey?
Regards,
Lars
|
|
| | |
Re: unidirectional ManyToMany with an order? [message #540993 is a reply to message #540515] |
Thu, 17 June 2010 21:44 |
Lars Fischer Messages: 105 Registered: July 2009 |
Senior Member |
|
|
Hello Cris,
On 16.06.2010 14:46, Chris Delahunt wrote:
>
> I don't know what database you are using, but the problem seems to be at
> the database level when using a column "ORDER". Try a different column
> name as it is likely a reserved word in your database.
ORDER is a reserved word. I changed it and now the table could be created.
But now I run into the next problem:
If the map with the items will be loaded, I get this exception:
[EL Warning]: Exception [EclipseLink-6069] (Eclipse Persistence Services
- 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.QueryException
Exception Description: The field [GROUP.SORT] in this expression has an
invalid table in this context.
Query: ReadAllQuery(referenceClass=Group sql="SELECT GROUP_ID,
GROUP_IDENT, GROUP_ENTRYDATE, GROUP_ACTSTATUS, GROUP_COMMENT,
GROUP_EDITDATE, GROUP_PROJECTID, GROUP_SUPERVISOR_USERID,
GROUP_EDITOR_USERID FROM GROUP")
[UIThread [1g3hqsofn5qa9q4ozsd2xiha2]] DEBUG
org.springframework.orm.jpa.JpaTransactionManager - Participating
transaction failed - marking existing transaction as rollback-only
[UIThread [1g3hqsofn5qa9q4ozsd2xiha2]] DEBUG
org.springframework.orm.jpa.JpaTransactionManager - Setting JPA
transaction on EntityManager
[org.eclipse.persistence.internal.jpa.EntityManagerImpl@1dfacc4]
rollback-only
[UIThread [1g3hqsofn5qa9q4ozsd2xiha2]] DEBUG
org.springframework.orm.jpa.JpaTransactionManager - Initiating
transaction rollback
[UIThread [1g3hqsofn5qa9q4ozsd2xiha2]] DEBUG
org.springframework.orm.jpa.JpaTransactionManager - Rolling back JPA
transaction on EntityManager
[org.eclipse.persistence.internal.jpa.EntityManagerImpl@1dfacc4]
[UIThread [1g3hqsofn5qa9q4ozsd2xiha2]] DEBUG
org.springframework.orm.jpa.JpaTransactionManager - Closing JPA
EntityManager
[org.eclipse.persistence.internal.jpa.EntityManagerImpl@1dfacc4] after
transaction
[UIThread [1g3hqsofn5qa9q4ozsd2xiha2]] DEBUG
org.springframework.orm.jpa.EntityManagerFactoryUtils - Closing JPA
EntityManager
Local Exception Stack:
Exception [EclipseLink-6069] (Eclipse Persistence Services -
2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.QueryException
Exception Description: The field [GROUP.SORT] in this expression has an
invalid table in this context.
Query: ReadAllQuery(referenceClass=Group sql="SELECT GROUP_ID,
GROUP_IDENT, GROUP_ENTRYDATE, GROUP_ACTSTATUS, GROUP_COMMENT,
GROUP_EDITDATE, GROUP_PROJECTID, GROUP_SUPERVISOR_USERID,
GROUP_EDITOR_USERID FROM GROUP")
at
org.eclipse.persistence.exceptions.QueryException.invalidTab leForFieldInExpression(QueryException.java:690)
The mapping now looks like this:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "GROUP_ITEM", joinColumns = @JoinColumn(name =
"GROUP_ID"), inverseJoinColumns = @JoinColumn(name = "ITEM_ID"))
@MapKeyColumn(name = "SORT")
private Map<Integer, Item> items;
Regards,
Lars
|
|
| | | | |
Goto Forum:
Current Time: Fri Apr 19 03:09:23 GMT 2024
Powered by FUDForum. Page generated in 0.01514 seconds
|