Column 'target_id' specified twice

824 views
Skip to first unread message

sina

unread,
Sep 22, 2010, 6:39:12 PM9/22/10
to Ebean ORM

I have a class Vote (shortened and removed getters/setters) which uses
compound ids:

@Entity
@Table(name = "vote")
@IdClass(Vote.VoteId.class)
public class Vote {
public static class VoteId {
private Long targetId;
private Long userId;
}

@Id
protected Long targetId;

@Id
protected Long userId;

private Byte value;

@Version
private Date lastUpdate;
}

And have class comment:
@Entity
@Table(name = "comment")
public class Comment extends CommentableEntity implements Votable {
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="target_id", referencedColumnName="id")
private Set<Vote> votes;
}

When I try to call Ebean.saveAssociations(comment, "votes")
I get the following error:

javax.persistence.PersistenceException:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Column
'target_id' specified twice
at
com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:
108)
at
com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.insert(DmlBeanPersister.java:
75)
at
com.avaje.ebeaninternal.server.persist.DefaultPersistExecute.executeInsertBean(DefaultPersistExecute.java:
100)
at
com.avaje.ebeaninternal.server.core.PersistRequestBean.executeNow(PersistRequestBean.java:
414)
at
com.avaje.ebeaninternal.server.core.PersistRequestBean.executeOrQueue(PersistRequestBean.java:
444)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.insert(DefaultPersister.java:
372)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.saveVanillaInsert(DefaultPersister.java:
348)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.saveVanillaRecurse(DefaultPersister.java:
332)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.saveRecurse(DefaultPersister.java:
279)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.saveAssocManyDetails(DefaultPersister.java:
744)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.saveMany(DefaultPersister.java:
649)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.saveAssociation(DefaultPersister.java:
779)
at
com.avaje.ebeaninternal.server.core.DefaultServer.saveAssociation(DefaultServer.java:
1592)
at
com.avaje.ebeaninternal.server.core.DefaultServer.saveAssociation(DefaultServer.java:
1573)
at com.avaje.ebean.Ebean.saveAssociation(Ebean.java:654)


Here is the sql command executed on mysql:
insert into vote (target_id, user_id, target_id, value, last_update)
values (3458764513820541247,1,3458764513820541247,1,'2010-09-22
14:24:45.0')

Can you help?
--sina

edge

unread,
Sep 23, 2010, 3:39:20 AM9/23/10
to Ebean ORM
looks like the JoinColumn is adding in the target_id again

which version of Ebean are you using - I fixed something like this not
so long ago (we were generating the column twice while generating the
DDL)
Are you mapping a legacy schema or have is this a new project -
personally I never use compound keys and avoid using the join columns
but I know this doesn't work for legacy dbs.

sina

unread,
Sep 23, 2010, 3:55:54 AM9/23/10
to Ebean ORM
I'm using ebean-2.6.1
I have *not* used ebean to generate DDLs, its a hand coded schema,
however, ebean generates the same schema as far as I can tell (Haven't
tried to run the create script)
--sina

sina

unread,
Sep 23, 2010, 3:57:48 AM9/23/10
to Ebean ORM
I am using 2.6.1
the schema is not generated, but as far as I can see, ebean generates
the same schema.
--sina
Reply all
Reply to author
Forward
0 new messages