hi there !

Is possible to define @OneToMany realtionship
without using join table ? (i saw that in book about Ejb 3.0).

i use openjpa and when i'm trying to do simple
realtionship A-B, as follows :

@Entity
public class Address implements Serializable {

        private Integer id;
        private String  street;
        private String  city;

        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        public Integer getId() {
                return id;
        }

...
}


@Entity
public class Customer implements Serializable {

        private Integer                         id;
        private String                          name;
        private String                          surname;
        private Collection<Address>     address = new ArrayList<Address>();

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Integer getId() {
                return id;
        }

        @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
        @JoinColumn(name = "Address_id")   
        public Collection<Address> getAddress() {
                return address;
        }

...
}

Client:

public class Testuj {
        public static void main(String[] args) {
                Properties prop = new Properties();
                prop.put(
                                        Context.INITIAL_CONTEXT_FACTORY,
                                        
"org.apache.openejb.client.RemoteInitialContextFactory");
                prop.put("java.naming.provider.url", "ejbd://localhost:4201");
                try {
                        Context context = new InitialContext(prop);
                        try {
                                CustomerManagerRemote cmr = 
(CustomerManagerRemote) context
                                                
.lookup("CustomerManagerRemote");

                                Customer customer = new Customer();
                                customer.setName("Anna");
                                customer.setSurname("Maria");

                                ArrayList<Address> addresses = 
(ArrayList<Address>)
customer.getAddress();
                                
                                Address address = new Address();
                                address.setCity("New York");
                                address.setStreet("Nieprawdopodna 12/123");
                                
                                addresses.add(address);
                                customer.setAddress(addresses);
                                cmr.addCustomer(customer);

                        } catch (Exception e) {
                                e.printStackTrace();
                        }
                } catch (NamingException e) {
                        e.printStackTrace();
                }
        }
}

.. i gets:

javax.ejb.EJBException: The bean encountered a non-application exception.;
nested exception is: 
        <openjpa-1.0.2-r420667:627158 fatal user error>
org.apache.openjpa.persistence.ArgumentException: You have supplied columns
for "org.testowa.Customer.address", but this mapping cannot have columns in
this context.
        at
org.apache.openejb.client.EJBInvocationHandler.convertException(EJBInvocationHandler.java:219)
        at
org.apache.openejb.client.EJBObjectHandler._invoke(EJBObjectHandler.java:157)
        at
org.apache.openejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:117)
        at
org.apache.openejb.client.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:52)
        at $Proxy0.addCustomer(Unknown Source)
        at org.testowa.Testuj.main(Testuj.java:44)
Caused by: <openjpa-1.0.2-r420667:627158 fatal user error>
org.apache.openjpa.persistence.ArgumentException: You have supplied columns
for "org.testowa.Customer.address", but this mapping cannot have columns in
this context.
        at
org.apache.openjpa.jdbc.meta.MappingInfo.assertNoSchemaComponents(MappingInfo.java:327)
        at
org.apache.openjpa.jdbc.meta.strats.RelationToManyTableFieldStrategy.map(RelationToManyTableFieldStrategy.java:96)
        at
org.apache.openjpa.jdbc.meta.strats.RelationCollectionTableFieldStrategy.map(RelationCollectionTableFieldStrategy.java:94)
        at
org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy(FieldMapping.java:120)
        at
org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:80)
        at
org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.java:438)
        at 
org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:403)
        at
org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping(ClassMapping.java:812)
        at 
org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1618)
        at
org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:675)
        at
org.apache.openjpa.meta.MetaDataRepository.resolveMapping(MetaDataRepository.java:636)
        at
org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:514)
        at
org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:302)
        at
org.apache.openjpa.jdbc.meta.MappingRepository.getMapping(MappingRepository.java:282)
        at
org.apache.openjpa.jdbc.meta.MappingTool.getMapping(MappingTool.java:673)
        at
org.apache.openjpa.jdbc.meta.MappingTool.buildSchema(MappingTool.java:745)
        at org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:643)
        at
org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:164)
        at
org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:130)
        at
org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:188)
        at
org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
        at
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
        at
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
        at
org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74)
        at
org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
        at
org.apache.geronimo.persistence.CMPEntityManagerTxScoped.persist(CMPEntityManagerTxScoped.java:81)
        at 
org.testowa.CustomerManagerBean.addCustomer(CustomerManagerBean.java:15)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:158)
        at
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:141)
        at
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
        at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
        at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
        at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
        at
org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:238)
        at
org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:129)
        at
org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:164)
        at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:122)
        at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:84)
        at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:60)
        at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:78)
        at org.apache.openejb.server.ServicePool$3.run(ServicePool.java:101)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:619)

what may be wronq ? 

pietia

-- 
View this message in context: 
http://www.nabble.com/Question-about-%40OneToMany-tp16840368p17170612.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to