http://n2.nabble.com/How-to-remove-an-entity-from-a-result-list-error-result-list-is-read-only-td209686.html
On Tue, Jan 12, 2010 at 8:41 AM, racarlson <[email protected]> wrote: > > I switched one query to JPAQL but still got the same messages, then I > listed > out each class in persistence.xml specifically and that seemed to solve the > issue. From what I have been able to research all openjpa implemementations > should list all the classes in use in persistence.xml even though toplink > and oracle do not require this. However now I am getting > java.lang.UnsupportedOperationException: Result lists are read-only even > after I close the entity manager. This is because we are returning the > lists > outside of the class Database.java where they should no longer be attached, > but apparently are. How do I detach these lists so the business logic can > manipulate them? > > > > > Craig L Russell wrote: > > > > Hi, > > > > Is there a reason you're using a native query for this, and not a > > JPAQL query? > > > > What you get from a native query is data, not objects. Your code is > > looking for an Account object and should use a JPAQL query. > > > > Craig > > > > On Jan 11, 2010, at 11:06 AM, racarlson wrote: > > > >> > >> public class Database > >> { > >> > >> // > >> > ******************************************************************************************* > >> private final static Logger LOG = > >> Logger.getLogger( Database.class ) ; > >> //log4j > >> private static EntityManagerFactory entityManagerFactory ; > >> private static final String JPA_FACTORY_NAME = "MyJpaFactory"; > >> > >> // > >> > ******************************************************************************************* > >> private void closeEntityManager ( > >> final EntityManager em ) > >> { > >> try > >> { > >> if ( ( em != null ) && > >> ( em.isOpen( ) ) ) > >> { > >> em.close( ) ; > >> } > >> } > >> catch ( final Exception e ) > >> { > >> Database.LOG.error( e ) ; > >> } > >> } > >> > >> // > >> > ******************************************************************************************* > >> private void setupEntityManagerFactory ( ) > >> { > >> if ( Database.entityManagerFactory == null ) > >> { > >> Database.entityManagerFactory = > >> > >> Persistence.createEntityManagerFactory( Database.JPA_FACTORY_NAME ) ; > >> } > >> } > >> > >> // > >> > ******************************************************************************************* > >> private EntityManager getEntityManager ( ) > >> { > >> this.setupEntityManagerFactory( ) ; > >> final EntityManager entityManager = > >> Database.entityManagerFactory.createEntityManager( ) ; > >> entityManager.getTransaction( ).begin( ); > >> return entityManager ; > >> } > >> > >> // > >> > ******************************************************************************************* > >> private EntityManager getEntityManagerWithOutTransaction ( ) > >> { > >> this.setupEntityManagerFactory( ) ; > >> return Database.entityManagerFactory.createEntityManager( ) > ; > >> } > >> // > >> > ******************************************************************************************* > >> private void logQuery ( > >> final String temp ) > >> { > >> if ( temp != null ) > >> { > >> Database.LOG.debug( temp ) ; > >> } > >> } > >> // > >> > ******************************************************************************************* > >> public Account getAccountByBillingSystemAccountNumber ( > >> final String billingSystemAccountNumber ) > >> { > >> final EntityManager em = > >> this.getEntityManagerWithOutTransaction( ) ; > >> return this.getAccountByBillingSystemAccountNumber( > >> billingSystemAccountNumber , > >> em , > >> true ) ; > >> } > >> > >> // > >> > ******************************************************************************************* > >> protected Account getAccountByBillingSystemAccountNumber ( > >> final String billingSystemAccountNumber , > >> final EntityManager em , > >> final boolean canCloseEntityManager ) > >> { > >> Account rtn = null ; > >> try > >> { > >> final String sql = > >> "select * from ACCOUNT a "+ > >> "where > >> a.BILLING_SYSTEM_ACCOUNT_NUMBER = \'" + > >> billingSystemAccountNumber + "\' " ; > >> final Query q = em.createNativeQuery( sql , > Account.class ) ; > >> this.logQuery( sql ) ; > >> if ( q != null ) > >> { > >> rtn = ( Account ) q.getResultList( ).get( 0 > ); > >> } > >> } > >> catch ( final NoResultException nre ) > >> { > >> rtn = null ; > >> } > >> finally > >> { > >> if ( canCloseEntityManager ) > >> { > >> this.closeEntityManager( em ) ; > >> } > >> } > >> return rtn ; > >> } > >> // > >> > ******************************************************************************************* > >> > >> /* some other methods to access other tables > >> ....... > >> */ > >> } > >> > >> -- > >> View this message in context: > >> > http://n2.nabble.com/openjpa-ignoring-column-annotation-tp4286639p4287474.html > >> Sent from the OpenJPA Users mailing list archive at Nabble.com. > > > > Craig L Russell > > Architect, Sun Java Enterprise System http://db.apache.org/jdo > > 408 276-5638 mailto:[email protected] > > P.S. A good JDO? O, Gasp! > > > > > > > > -- > View this message in context: > http://n2.nabble.com/openjpa-ignoring-column-annotation-tp4286639p4291966.html > Sent from the OpenJPA Users mailing list archive at Nabble.com. > -- Thanks, Rick
