openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wes Wannemacher" <w...@wantii.com>
Subject Re: ManyToMany troubles
Date Thu, 27 Dec 2007 16:54:44 GMT
Oops, my mistake, I updated the following -
@ManyToMany(cascade=CascadeType.ALL)

to be -
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)

and everything is fine now. (I could swear I had tried it.)

Thanks anyways!
-Wes


On 12/27/07, Wes Wannemacher <wesw@wantii.com> wrote:
> Hello,
>
> I am unsure if this is a Spring issue or a JPA issue. I am working on
> a fairly simple component of an App. I am trying to create users and
> roles. The user object has a many-to-many relationship to the roles.
> ->
>
> ======
> @Entity
> @Table(name="htt_users", schema = "htt")
> public class HttUser {
>
> ...
>
>         @ManyToMany(cascade=CascadeType.ALL)
>         private List<HttRole> roles;
>
> ======
> @Entity
> @Table(name="htt_roles", schema = "htt")
> public class HttRole {
>
> ...
>
>         @ManyToMany(mappedBy="roles")
>         private List<HttUser> members;
>
> I have created these classes with simple unit tests including the following -
>
> List<HttRole> roles = new ArrayList<HttRole>();
> roles.add(role);
> user.setRoles(roles);
> ...
> assertTrue(foundUser.getRoles() != null );
>
> The unit test runs without complaining. I have also checked that the
> schema is created correctly and there is also legitimate data within
> the three tables (htt_users, htt_roles, htt_users_htt_roles).
>
> I am trying to wire in some quick DAO classes using Spring. Here is my
> applicationContext.xml -
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xmlns:aop="http://www.springframework.org/schema/aop"
>     xmlns:tx="http://www.springframework.org/schema/tx"
>     xsi:schemaLocation="
>     http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>     http://www.springframework.org/schema/tx
> http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
>     http://www.springframework.org/schema/aop
> http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
>
>     <bean
>         class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"
> />
>
>     <bean id="manageUsers" scope="prototype"
>       class="local.httlima.maint.admin.ManageUsers" >
>         <property name="httUserDao" ref="httUserDao" />
>         <property name="httRoleDao" ref="httRoleDao" />
>     </bean>
>
>     <bean id="manageRoles" scope="prototype"
>       class="local.httlima.maint.admin.ManageRoles" >
>         <property name="httRoleDao" ref="httRoleDao" />
>     </bean>
>
>     <bean id="entityManagerFactory"
>         class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
>         <property name="dataSource" ref="dataSource" />
>         <property name="jpaVendorAdapter">
>             <bean
>                 class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
>                 <property name="database" value="MYSQL" />
>                 <property name="showSql" value="true" />
>             </bean>
>         </property>
>     </bean>
>
>     <bean id="dataSource"
>         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
>         <property name="driverClassName" value="com.mysql.jdbc.Driver" />
>         <property name="url" value="jdbc:mysql://localhost:3306/htt" />
>         <property name="username" value="..." />
>         <property name="password" value="..." />
>     </bean>
>
>     <bean id="transactionManager"
>         class="org.springframework.orm.jpa.JpaTransactionManager">
>         <property name="entityManagerFactory" ref="entityManagerFactory" />
>     </bean>
>
>     <bean id="httUserDao"
> class="com.wantii.htt.px.dao.impl.HttUserDAOImplJPA" />
>     <bean id="httRoleDao"
> class="com.wantii.htt.px.dao.impl.HttRoleDAOImplJPA" />
>
>     <tx:annotation-driven transaction-manager="transactionManager" />
>
> </beans>
>
> Everything appears to be working correctly until I get to the
> following section in another part of the code -
>
> HttUser user = userDao.find(username);
> ...
> List<HttRole> selectedRoles = user.getRoles();
> List<String> selectedRoleNames = new ArrayList<String>();
> Iterator<HttRole> iter = selectedRoles.iterator();
> while (iter.hasNext() ) {
>         selectedRoleNames.add(iter.next().getRoleName());
> }
> this.setRoleNames(selectedRoleNames);
>
> I get a NullPointerException each time it gets to user.getRoles(). I
> tried creating a getRoles(username) within the DAO in case the call
> needed to be within a transaction, but I got an NPE there as well. Am
> I missing something that would allow the roles to be passed back?
>
> Thanks for your help!
>
> -Wes
>
>
> --
> Wesley Wannemacher
> President, Head Engineer/Consultant
> WanTii, Inc.
> http://www.wantii.com
>


-- 
Wesley Wannemacher
President, Head Engineer/Consultant
WanTii, Inc.
http://www.wantii.com

Mime
View raw message