In fact, the association is the one club can have many users
I have a main problem in club POJO, is the following correct ? :
@OneToMany(targetEntity=org.appfuse.model.User.class, mappedBy="club")
public Set<User> getUsers()
{
return users;
}
fadhlirahim wrote:
>
> Hello there,
>
> A couple of questions. Is the Club class is the owning side of the
> association? Does deleting the club will also delete the user?
>
>
>
> From what you're trying to do, I understand that you're trying to make a
> bidirectional one-to-many/many-to-one association. So IMHO, it will make
> much more sense if the Club is the inverse side of the association. So if
> for example, a User is deleted. The associated references of clubs joined
> by
> the user is also deleted.
>
> Modify your codes so it looks like this.
>
> In your User class,
>
> private Set<Club> clubs = new HashSet<Club>();
> @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.PERSIST,
> CascadeType.MERGE, CascadeType.REMOVE}, mappedBy="club")
> @org.hibernate.annotations.Cascade(
> org.hibernate.annotations.CascadeType.DELETE_ORPHAN) //If you're no using
> hibernate delete this portion. This is for any references to the clubs own
> by the user is also deleted
> public Set<User> getClubs() {
> return clubs;
> }
>
> //To be able to do transitive persistence. Add this method...
> public void addClubs(Club club) {
> if(club== null)
> throw new IllegalArgumentException("Can't add null object");
> club.setClub(this);
> this.getClubs().add(club);
> }
>
>
> And for your Club class POJO..
> private User user;
> @ManyToOne(fetch = FetchType.LAZY)
> @JoinColumn(name = "clubID", nullable=false, updatable=false)
> public User getUsers() {
> return user;
> }
>
>
> Hopes this help.
>
>
> On 7/5/07, Fan <[EMAIL PROTECTED]> wrote:
>>
>>
>> Here is what I have in club POJO:
>>
>> @OneToMany(targetEntity=org.appfuse.model.User.class,
>> cascade=CascadeType.ALL, mappedBy="club", fetch = FetchType.LAZY)
>> public Set<User> getUsers()
>> {
>> return users;
>> }
>>
>> Here is what I have in User POJO
>>
>> @ManyToOne(optional=false)
>> @JoinColumn(name="clubID", nullable=false, updatable=false)
>> public Club getClub()
>> {
>> return club;
>> }
>>
>> But I still hitting the error:
>>
>> org.springframework.beans.factory.BeanCreationException: Error creating
>> bean
>> with name 'sessionFactory' defined in URL [jar:file:/C:/Documents and
>> Settings/fan/.m2/repository/org/appfuse/appfuse-hibernate/2.0-m5/appfuse-
>> hibernate-2.0-m5.jar!/applicationContext-dao.xml]:
>> Invocation of init method failed; nested exception is
>> org.hibernate.AnnotationException: mappedBy reference an unknown target
>> entity property: org.appfuse.model.User.club in
>> com.smartclub.model.Club.users
>> Caused by: org.hibernate.AnnotationException: mappedBy reference an
>> unknown
>> target entity property: org.appfuse.model.User.club in
>> com.smartclub.model.Club.users
>> at
>> org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(
>> CollectionBinder.java:543)
>> at
>> org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(
>> CollectionBinder.java:508)
>> at
>> org.hibernate.cfg.CollectionSecondPass.doSecondPass(
>> CollectionSecondPass.java:43)
>> at
>> org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1127)
>> at
>> org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(
>> AnnotationConfiguration.java:296)
>> at
>> org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java
>> :1283)
>> at
>>
>> org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory
>> (LocalSessionFactoryBean.java:805)
>> at
>>
>> org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory
>> (LocalSessionFactoryBean.java:745)
>> at
>>
>> org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet
>> (AbstractSessionFactoryBean.java:134)
>> at
>>
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods
>> (AbstractAutowireCapableBeanFactory.java:1202)
>> at
>>
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean
>> (AbstractAutowireCapableBeanFactory.java:1172)
>> at
>>
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean
>> (AbstractAutowireCapableBeanFactory.java:428)
>> at
>> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(
>> AbstractBeanFactory.java:251)
>> at
>>
>> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton
>> (DefaultSingletonBeanRegistry.java:156)
>> at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(
>> AbstractBeanFactory.java:248)
>> at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(
>> AbstractBeanFactory.java:160)
>> at
>>
>> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons
>> (DefaultListableBeanFactory.java:284)
>> at
>> org.springframework.context.support.AbstractApplicationContext.refresh(
>> AbstractApplicationContext.java:352)
>> at
>>
>> org.springframework.test.AbstractSingleSpringContextTests.createApplicationContext
>> (AbstractSingleSpringContextTests.java:199)
>> at
>>
>> org.springframework.test.AbstractSingleSpringContextTests.loadContextLocations
>> (AbstractSingleSpringContextTests.java:179)
>> at
>> org.springframework.test.AbstractSingleSpringContextTests.loadContext(
>> AbstractSingleSpringContextTests.java:158)
>> at
>> org.springframework.test.AbstractSpringContextTests.getContext(
>> AbstractSpringContextTests.java:105)
>> at
>> org.springframework.test.AbstractSingleSpringContextTests.setUp(
>> AbstractSingleSpringContextTests.java:87)
>> at junit.framework.TestCase.runBare(TestCase.java:128)
>> at
>> org.springframework.test.ConditionalTestCase.runBare(
>> ConditionalTestCase.java:69)
>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>> at junit.framework.TestResult.run(TestResult.java:109)
>> at junit.framework.TestCase.run(TestCase.java:120)
>> at junit.framework.TestSuite.runTest(TestSuite.java:230)
>> at junit.framework.TestSuite.run(TestSuite.java:225)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>> Source)
>> at java.lang.reflect.Method.invoke(Unknown Source)
>> at
>> org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java
>> :210)
>> at
>> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(
>> AbstractDirectoryTestSuite.java:135)
>> at
>> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(
>> AbstractDirectoryTestSuite.java:122)
>> at org.apache.maven.surefire.Surefire.run(Surefire.java:129)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>> Source)
>> at java.lang.reflect.Method.invoke(Unknown Source)
>> at
>> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(
>> SurefireBooter.java:225)
>> at
>> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java
>> :747)
>>
>>
>>
>> ros wrote:
>> >
>> > Here is refference about JPA annotation
>> >
>> >
>> http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#OneToMany
>> >
>> > here is example:
>> >
>> > @Entity
>> > @Table(name="app_user")
>> > public class User extends BaseObject implements Serializable,
>> UserDetails
>> > {
>> > ...
>> > protected Set<Entity> entitys = new HashSet<Entity>();
>> > ...
>> > @OneToMany(targetEntity=Entity.class, cascade=CascadeType.ALL,
>> > mappedBy="user", fetch = FetchType.LAZY)
>> > public Set<Entity> getEntitys() {
>> > return entitys;
>> > }
>> > ...
>> > public void setEntitys(Set<Entity> entitys) {
>> > this.entitys = entitys;
>> > }
>> > ...
>> > }
>> >
>> > @Entity
>> > @Table(name="entity")
>> > public class Entity extends BaseObject implements Comparable,
>> > Serializable,
>> > Cloneable {
>> > ..
>> > protected User user;
>> > ..
>> > @ManyToOne(optional=false)
>> > @JoinColumn(name="user_id", nullable=false, updatable=false)
>> > public User getUser() {
>> > return user;
>> > }
>> > ...
>> > public void setUser(User user) {
>> > this.user = user;
>> > }
>> > ...
>> > //hashCode and equils functions
>> > ...
>> > }
>> >
>> > Hope this helps.
>> >
>> >
>> >
>> > Fan wrote:
>> >>
>> >> what's the use of persistence.xml ??
>> >>
>> >> I saw only two following entries in the file, should I add a new entry
>> >> for club pojo ?
>> >>
>> >> <class>org.appfuse.model.User</class>
>> >> <class>org.appfuse.model.Role</class>
>> >>
>> >> I did try the following way:
>> >>
>> >> In my club POJO, I have
>> >>
>> >> @OneToMany
>> >> public Set<User> getUsers()
>> >> {
>> >> return users;
>> >> }
>> >>
>> >> in my user POJO, I have:
>> >>
>> >> @ManyToOne
>> >> @JoinColumn(name="clubID")
>> >> public Club getClub()
>> >> {
>> >> return club;
>> >> }
>> >>
>> >> so the result is:
>> >>
>> >> 1) I have one column called "clubID" in user table
>> >> 2) A table called "club_app_user" with two keys "Club_clubID",
>> "users_id"
>> >> generated
>> >>
>> >> but when I have saved the user record with "clubID" being saved
>> >> successfully in user table, nothing did happen in "club_app_user" , in
>> >> other words, the "club_app_user" still empty record, or do I need to
>> save
>> >> the record in "club_app_user" explicitly ?
>> >>
>> >>
>> >> ros wrote:
>> >>>
>> >>> Fan,
>> >>>
>> >>> About 1) in pom.xml there should be
>> >>>
>> >>> <dependency>
>> >>> <groupId>org.appfuse</groupId>
>> >>> <artifactId>appfuse-${web.framework}</artifactId>
>> >>> <version>${appfuse.version}</version>
>> >>> <type>warpath</type>
>> >>> <exclusions>
>> >>> <!-- This exclusion and the dependency following this
>> >>> one allow DAO framework switching. -->
>> >>> <!-- You only need these if you want to use JPA or
>> >>> iBATIS. See APF-565 for more information. -->
>> >>> <!-- It does no harm to leave it in for Hibernate,
>> but
>> >>> it's not needed. -->
>> >>> <exclusion>
>> >>> <groupId>org.appfuse</groupId>
>> >>> <artifactId>appfuse-hibernate</artifactId>
>> >>> </exclusion>
>> >>> </exclusions>
>> >>> </dependency>
>> >>> <dependency>
>> >>> <groupId>org.appfuse</groupId>
>> >>> <artifactId>appfuse-${dao.framework}</artifactId>
>> >>> <version>${appfuse.version}</version>
>> >>> <exclusions>
>> >>> <exclusion>
>> >>> <groupId>org.appfuse</groupId>
>> >>> <artifactId>appfuse-data-common</artifactId>
>> >>> </exclusion>
>> >>> </exclusions>
>> >>> </dependency>
>> >>>
>> >>> Check / src / main / resources / META-INF / persistence.xml
>> >>>
>> >>>
>> >>> Fan wrote:
>> >>>>
>> >>>> Hey ros:
>> >>>>
>> >>>> 1)The original pom.xml already has the exclusion :
>> >>>>
>> >>>> <dependency>
>> >>>> <groupId>org.appfuse</groupId>
>> >>>> <artifactId>appfuse-${web.framework}</artifactId>
>> >>>> <version>${appfuse.version}</version>
>> >>>> <type>warpath</type>
>> >>>> <!-- This exclusion and the dependency following this
>> one
>> >>>> allow DAO framework switching. -->
>> >>>> <!-- You only need these if you want to use JPA or
>> iBATIS.
>> >>>> See APF-565 for more information. -->
>> >>>> <!-- It does no harm to leave it in for Hibernate, but
>> it's
>> >>>> not needed. -->
>> >>>> <exclusions>
>> >>>> <exclusion>
>> >>>> <groupId>org.appfuse</groupId>
>> >>>> <artifactId>appfuse-hibernate</artifactId>
>> >>>> </exclusion>
>> >>>> </exclusions>
>> >>>> </dependency>
>> >>>>
>> >>>> 2) what did you mean by "Then add in to your poroject User and Role
>> >>>> pojos at appfuse namespace" ?
>> >>>>
>> >>>> 3) I did check the user pojo, it does has the foreign key
>> club_clubID
>> >>>>
>> >>>> 4) Yup, I am using M5
>> >>>>
>> >>>> 5) I did include the bean definition in applicationContext.xml
>> >>>>
>> >>>> <bean
>> class="org.appfuse.dao.spring.HibernateExtensionPostProcessor">
>> >>>> <property name="annotatedClasses">
>> >>>> <list>
>> >>>> <value>com.smartclub.model.Club</value>
>> >>>> <value>com.smartclub.model.Facility</value>
>> >>>> </list>
>> >>>> </property>
>> >>>> </bean>
>> >>>>
>> >>>> 6) I did include the mapping in hibernate.cfg.xml as well
>> >>>>
>> >>>> <hibernate-configuration>
>> >>>> <session-factory>
>> >>>> <mapping class="org.appfuse.model.User"/>
>> >>>> <mapping class="org.appfuse.model.Role"/>
>> >>>> <mapping class="com.smartclub.model.Club"/>
>> >>>> <mapping class="com.smartclub.model.Facility"/>
>> >>>> </session-factory>
>> >>>> </hibernate-configuration>
>> >>>>
>> >>>>
>> >>>> What else I have to check ??
>> >>>>
>> >>>>
>> >>>> ros wrote:
>> >>>>>
>> >>>>> Hi!
>> >>>>>
>> >>>>> You have to exclude AppFuse Data Common Package in your pom.xml.
>> Then
>> >>>>> add in to your poroject User and Role pojos at appfuse namespace
>> (as
>> >>>>> described in
>> http://www.appfuse.org/display/APF/AppFuse+Core+Classes
>> )
>> >>>>>
>> >>>>> Try to do mvn clean compile hibernate3:hbm2ddl and check database
>> for
>> >>>>> user table structure. If it does not contains fields defined in
>> User
>> >>>>> pojo of your project then AppFuse Data Common Package is not
>> excluded.
>> >>>>>
>> >>>>> What is your version of appfuse, M5?
>> >>>>>
>> >>>>> Regards,
>> >>>>> ros
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> Fan wrote:
>> >>>>>>
>> >>>>>> Hey Ros:
>> >>>>>>
>> >>>>>> I did add the related Object to both hibernate.cfg.xml and
>> >>>>>> applicationContext.xml. But it just does not work
>> >>>>>>
>> >>>>>> Or do you mind to show me your hibernate.cfg.xml and
>> >>>>>> applicationContext.xml ? I afraid I might do it wrongly
>> >>>>>>
>> >>>>>> Is that necessary to exclude the AppFuse Data Common Package ?
>> >>>>>>
>> >>>>>>
>> >>>>>> ros wrote:
>> >>>>>>>
>> >>>>>>> Hi!
>> >>>>>>>
>> >>>>>>> I resolve that by add my Contact object to both hibernate.cfg.xml
>> >>>>>>> and applicationContext.xml.
>> >>>>>>>
>> >>>>>>> Reffer to http://www.appfuse.org/display/APF/AppFuse+Core+Classes
>> >>>>>>>
>> >>>>>>> Hope this helps.
>> >>>>>>>
>> >>>>>>> ros
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> Fan wrote:
>> >>>>>>>>
>> >>>>>>>> Ros,
>> >>>>>>>>
>> >>>>>>>> What's the fix ? I am facing the same error as you did
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> ros wrote:
>> >>>>>>>>>
>> >>>>>>>>> Right. Thanks Matt!
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>
>> >>>>>
>> >>>>
>> >>>>
>> >>>
>> >>>
>> >>
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/override-User-code-class-and-link-OneToMany-to-any-other-class-tf3217084s2369.html#a11448902
>> Sent from the AppFuse - User mailing list archive at Nabble.com.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
> --
> /fadhli
>
>
--
View this message in context:
http://www.nabble.com/override-User-code-class-and-link-OneToMany-to-any-other-class-tf3217084s2369.html#a11521807
Sent from the AppFuse - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]