[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] Error Mapping a Join Table with Additional Columns
|
The issue seems to be you are using a different column name in your
EmbeddedId, but using the default in your ManyToOne. Add a JoinColumn to
the ManyToOne's that uses the same name as in your id.
drcriado wrote:
>
> Hi!
>
> I'm trying develop a ManytoMany relation with attributes in the join table
> and I obtain always the same error "There should be one non-read-only
> mapping defined for the primary key field", but I don't understand why.
>
> I tried different alternatives and I managed to make it work but I think
> they are not the correct method (using @IdClass or forcing join
> attributes)
>
> I know it is more correct to use a generated Id attribute to the
> association class, but I am making an study of eclipselink as a
> development platform and I want to learn more about its operation.
>
> Thanks in anticipation!
>
> Best Regards,
> Daniel R. Criado
>
>
> ===========
> Error description:
> ===========
>
> Exception [EclipseLink-46] (Eclipse Persistence Services - 1.1.0.r3634):
> org.eclipse.persistence.exceptions.DescriptorException
> Exception Description: There should be one non-read-only mapping defined
> for the primary key field [test4_5.test4_id].
> Descriptor: RelationalDescriptor(leandra.test1_6_2.Test45 -->
> [DatabaseTable(test4_5)])
>
> Runtime Exceptions:
> ---------------------------------------------------------
>
> at
> org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:477)
> at
> org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:406)
> at
> org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:666)
> at
> org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:630)
> at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:229)
> at
> org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:255)
> at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:111)
> at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:163)
> at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:150)
> at
> org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:392)
> at
> org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:320)
> at
> org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:374)
> at
> org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:263)
> at
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> at $Proxy22.storeTest4(Unknown Source)
> at leandra.test1_6_2.TestJpaSpring.test(TestJpaSpring.java:21)
> at leandra.test1_6_2.TestJpaSpring.main(TestJpaSpring.java:11)
>
> ===========
> Platform:
> ===========
>
> - EclipseLink version: 1.1.0.r3634 (using javax.persistent_1.99)
> - Spring Framework 2.5.6
> - MySQL 5.1.33
>
> ===========
> Code:
> ===========
>
> @Entity
> public class Test4 implements Serializable {
> @Id
> @GeneratedValue(strategy=GenerationType.IDENTITY)
> private int id;
>
> private String name;
>
> @OneToMany(mappedBy="test4")
> private Set<Test45> test45Collection;
>
> private static final long serialVersionUID = 1L;
>
> public Test4() {
> super();
> }
>
> public int getId() {
> return this.id;
> }
>
> public void setId(int id) {
> this.id = id;
> }
>
> public String getName() {
> return this.name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> public Set<Test45> getTest45Collection() {
> return this.test45Collection;
> }
>
> public void setTest45Collection(Set<Test45> test45Collection) {
> this.test45Collection = test45Collection;
> }
>
> }
>
> @Entity
> public class Test5 implements Serializable {
> @Id
> @GeneratedValue(strategy=GenerationType.IDENTITY)
> private int id;
>
> private String name;
>
> @OneToMany(mappedBy="test5")
> private Set<Test45> test45Collection;
>
> private static final long serialVersionUID = 1L;
>
> public Test5() {
> super();
> }
>
> public int getId() {
> return this.id;
> }
>
> public void setId(int id) {
> this.id = id;
> }
>
> public String getName() {
> return this.name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> public Set<Test45> getTest45Collection() {
> return this.test45Collection;
> }
>
> public void setTest45Collection(Set<Test45> test45Collection) {
> this.test45Collection = test45Collection;
> }
>
> }
>
> @Entity
> @Table(name="test4_5")
> public class Test45 implements Serializable {
> @EmbeddedId
> private Test45PK pk;
>
> private boolean active;
>
> @ManyToOne
> private Test4 test4;
>
> @ManyToOne
> private Test5 test5;
>
> private static final long serialVersionUID = 1L;
>
> public Test45() {
> super();
> }
>
> public Test45PK getPk() {
> return this.pk;
> }
>
> public void setPk(Test45PK pk) {
> this.pk = pk;
> }
>
> public boolean getActive() {
> return this.active;
> }
>
> public void setActive(boolean active) {
> this.active = active;
> }
>
> public Test4 getTest4() {
> return this.test4;
> }
>
> public void setTest4(Test4 test4) {
> this.test4 = test4;
> }
>
> public Test5 getTest5() {
> return this.test5;
> }
>
> public void setTest5(Test5 test5) {
> this.test5 = test5;
> }
>
> }
>
> @Embeddable
> public class Test45PK implements Serializable {
> @Column(name="test4_id", insertable=false, updatable=false)
> private int test4Id;
>
> @Column(name="test5_id", insertable=false, updatable=false)
> private int test5Id;
>
> private static final long serialVersionUID = 1L;
>
> public Test45PK() {
> super();
> }
>
> public int getTest4Id() {
> return this.test4Id;
> }
>
> public void setTest4Id(int test4Id) {
> this.test4Id = test4Id;
> }
>
> public int getTest5Id() {
> return this.test5Id;
> }
>
> public void setTest5Id(int test5Id) {
> this.test5Id = test5Id;
> }
>
> @Override
> public boolean equals(Object o) {
> if (o == this) {
> return true;
> }
> if ( ! (o instanceof Test45PK)) {
> return false;
> }
> Test45PK other = (Test45PK) o;
> return (this.test4Id == other.test4Id)
> && (this.test5Id == other.test5Id);
> }
>
> @Override
> public int hashCode() {
> final int prime = 31;
> int hash = 17;
> hash = hash * prime + this.test4Id;
> hash = hash * prime + this.test5Id;
> return hash;
> }
>
> }
>
-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
http://www.eclipse.org/eclipselink/
EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
TopLink
Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
http://wiki.oracle.com/page/TopLink TopLink
Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
http://www.nabble.com/EclipseLink-f26430.html EclipseLink
Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
--
View this message in context: http://www.nabble.com/Error-Mapping-a-Join-Table-with-Additional-Columns-tp23556016p23636524.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.