You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by kostellodon <do...@citi.com> on 2011/03/25 17:47:59 UTC

Oracle XMLType fetch problems

I am working with base WebSphere 7, which includes JPA 1.2.1, and am
interacting with an Oracle 11.2 database.  I have a table with an XMLType
column in it that I am trying to persist and later retrieve from.  I am
doing my testing using JUnit 4, using ojdbc6.11.1.0.7.0.jar for my driver. 
My classes are being enhanced at loadtime using the javaagent.

I have tried 2 different methods to store and retrieve the xmltype column. 
My first class uses a simple String attribute, and looks like this
(BasicEntity just contains versioning and user info):

@Entity
@Table(name="SERVICE_SNAPSHOTS")
public class ServiceSnapshot extends BasicEntity {
	
	private static final long serialVersionUID = 5789621189247103676L;

	@Id
	@Column(name="SS_ID")
	@SequenceGenerator(name="id_generatorServiceSnapshot",
sequenceName="SERVICE_SNAPSHOTS_SEQ", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="id_generatorServiceSnapshot")
	private Long id;

	@Column(name="SS_SERVICE_CD")
	private String serviceCode;

	@Column(name="SS_OPERATION_CD")
	private String operationCode;

	@Column(name="SS_CONTENTS_XML")
	private String contentsXML;


When I persist the objects, things appear to be stored in the database as
expected.  If I store and fetch the objects in the same method (so that the
objects are in the entity manager), everything comes back fine.  I can query
the database via SQL and the results are returned.  However, if I just fetch
the objects, all of the attributes except the XML attribute are properly
fetched.  The XML attribute is null.  If I log the SQL that's being run, I
see the column in the SQL string, but the contentsXML is still null.

My second uses a JAX-B enhanced object to replace the contentsXML attribute,
and this attribute looks like this:
	@Persistent(fetch=FetchType.EAGER)
	@Strategy("org.apache.openjpa.jdbc.meta.strats.XMLValueHandler")
	@Column(name="ss_contents_xml")
	private DEServiceResults results;

I get the same behavior with this class - the results attribute is null,
even though the other attributes are not, and results is in the SQL query
that gets logged.

I can fetch the xml if I use a native query, so I don't think it's a driver
issue.  Am I setting up my xmltype incorrectly, is this an OpenJPA problem,
or is this a bug with the IBM version?

Thanks for any help.

Don

--
View this message in context: http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

RE: Oracle XMLType fetch problems

Posted by MiƂosz Tylenda <mt...@o2.pl>.
Hi Don,

The AbsrtactMethodError probably comes from the fact that the setClob you use is a JDBC 4 variant of the method. If the driver is actually a JDBC 4 driver, you have chances to invoke the method like this:

((org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement) stmnt).getInnermostDelegate().setClob(...)

I am afraid there is no simple way to inject "XMLType(?)" into INSERTs in OpenJPA 1.2. You might try to extend the org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager or some of its neighbours and set it thru a property:

<property name="openjpa.jdbc.UpdateManager" value="org.apache.openjpa.jdbc.kernel.YourUpdateManager" />


You have probably seen the changes made to OpenJPA 2.1 in the source code, if not see [1], Subversion Commits tab.

Cheers,
Milosz

[1] https://issues.apache.org/jira/browse/OPENJPA-1691


> I've run into issues with handling strings whose length > 4000 chars.  I know this is a documented bug that is fixed in OpenJPA 2.1, but I'm limited to the OpenJPA 1.2.1, and am trying to fit the solution into that version.
> 
> I extended the base OracleDictionary, modified my persistence.xml to use my dictionary, and overrode the connectedConfiguration() method.  This fixed the fetch problems.
> 
> However, I can't figure out how to get the insert to work.  I overrode the setTyped() method and put "stmnt.setClob" in there for my xml columns.  However, I'm getting an abstract method exception when this gets invoked.  Additionally, I can't figure out how to get the changes made in RowImpl to get the generated sql correctly created (i.e. to insert XMLType(?) into the string).  Do you have any insight into how or if I can work around this issue?
> 
> Thanks for any help.
> 
> Don
> 
> ________________________________
> From: Michael Dick [via OpenJPA] [mailto:ml-node+6209080-1310115157-321123@n2.nabble.com]
> Sent: Friday, March 25, 2011 3:27 PM
> To: Kostello, Donald G [GCG-NAOT]
> Subject: Re: Oracle XMLType fetch problems
> 
> The columnDefinition is the way I'd recommend if you know you'll be using
> Oracle. Other databases might have a different type names for XML columns so
> you're losing a little portability with this approach.
> 
> At any rate, I'm glad it worked for you.
> 
> -mike
> 
> 
> On Fri, Mar 25, 2011 at 3:14 PM, kostellodon <[hidden email]</user/SendEmail.jtp?type=node&node=6209080&i=0&by-user=t>>wrote:
> 
> > I don't have control over our production environment, so I can't ensure
> > we'll have the fixpacks available, so I can't try your second solution.
> >  But, your first method worked like a charm.  Adding the same
> > columnDefinition to my jaxb example caused that to start working also.  The
> > restriction seems to be that if I have multiple mappings for the same table,
> > the first entity that I use to access the table has to have that
> > columnDefinition (which is covered, obviously, by adding that definition to
> > all of my entities accessing that table).  Thanks for the help.
> >
> > Don
> >
> > ________________________________
> > From: Michael Dick [via OpenJPA] [mailto:
> > [hidden email]</user/SendEmail.jtp?type=node&node=6209080&i=1&by-user=t>]
> > Sent: Friday, March 25, 2011 1:30 PM
> > To: Kostello, Donald G [GCG-NAOT]
> > Subject: Re: Oracle XMLType fetch problems
> >
> > Hi Don,
> >
> > I'm not familiar with jaxb, but what you have looks pretty close to the
> > example in the OpenJPA manual.
> >
> > I've tried to reproduce the non-jaxb path and found that the problem is
> > that
> > OpenJPA is expecting your XML column to be a VARCHAR (because that's how
> > it's defined in the entity).
> >
> > I've found two ways to solve the problem :
> > 1. Add a columnDefinition to your @Column annotation. For example :
> >
> >    @Column(name = "XMLCOLUMN", columnDefinition ="XMLCOLUMN XMLType")
> >    private String xmlColumn;
> >
> > 2. Set the openjpa.jdbc.SchemaFactory property to "native" in
> > persistence.xml. This will tell OpenJPA to read the column definitions for
> > every entity in your persistence unit - so it'll take a little longer to
> > create the EntityManagerFactory. You will also want the fixes for
> > OPENJPA-128 <https://issues.apache.org/jira/browse/OPENJPA-1289>9 and
> > OPENJPA-1874 <https://issues.apache.org/jira/browse/OPENJPA-1874>. These
> > are
> > available in our nightly snapshots which are picked up by WebSphere on a
> > regular basis (but you might need the latest fixpack).
> >
> > Hope this helps,
> > -mike
> >
> > On Fri, Mar 25, 2011 at 11:47 AM, kostellodon <[hidden
> > email]</user/SendEmail.jtp?type=node&node=6208737&i=0&by-user=t>>wrote:
> >
> > > I am working with base WebSphere 7, which includes JPA 1.2.1, and am
> > > interacting with an Oracle 11.2 database.  I have a table with an XMLType
> > > column in it that I am trying to persist and later retrieve from.  I am
> > > doing my testing using JUnit 4, using ojdbc6.11.1.0.7.0.jar for my
> > driver.
> > > My classes are being enhanced at loadtime using the javaagent.
> > >
> > > I have tried 2 different methods to store and retrieve the xmltype
> > column.
> > > My first class uses a simple String attribute, and looks like this
> > > (BasicEntity just contains versioning and user info):
> > >
> > > @Entity
> > > @Table(name="SERVICE_SNAPSHOTS")
> > > public class ServiceSnapshot extends BasicEntity {
> > >
> > >        private static final long serialVersionUID = 5789621189247103676L;
> > >
> > >        @Id
> > >        @Column(name="SS_ID")
> > >        @SequenceGenerator(name="id_generatorServiceSnapshot",
> > > sequenceName="SERVICE_SNAPSHOTS_SEQ", allocationSize=1)
> > >        @GeneratedValue(strategy=GenerationType.SEQUENCE,
> > > generator="id_generatorServiceSnapshot")
> > >        private Long id;
> > >
> > >        @Column(name="SS_SERVICE_CD")
> > >        private String serviceCode;
> > >
> > >        @Column(name="SS_OPERATION_CD")
> > >        private String operationCode;
> > >
> > >        @Column(name="SS_CONTENTS_XML")
> > >        private String contentsXML;
> > >
> > >
> > > When I persist the objects, things appear to be stored in the database as
> > > expected.  If I store and fetch the objects in the same method (so that
> > the
> > > objects are in the entity manager), everything comes back fine.  I can
> > > query
> > > the database via SQL and the results are returned.  However, if I just
> > > fetch
> > > the objects, all of the attributes except the XML attribute are properly
> > > fetched.  The XML attribute is null.  If I log the SQL that's being run,
> > I
> > > see the column in the SQL string, but the contentsXML is still null.
> > >
> > > My second uses a JAX-B enhanced object to replace the contentsXML
> > > attribute,
> > > and this attribute looks like this:
> > >        @Persistent(fetch=FetchType.EAGER)
> > >        @Strategy("org.apache.openjpa.jdbc.meta.strats.XMLValueHandler")
> > >        @Column(name="ss_contents_xml")
> > >        private DEServiceResults results;
> > >
> > > I get the same behavior with this class - the results attribute is null,
> > > even though the other attributes are not, and results is in the SQL query
> > > that gets logged.
> > >
> > > I can fetch the xml if I use a native query, so I don't think it's a
> > driver
> > > issue.  Am I setting up my xmltype incorrectly, is this an OpenJPA
> > problem,
> > > or is this a bug with the IBM version?
> > >
> > > Thanks for any help.
> > >
> > > Don
> > >
> > > --
> > > View this message in context:
> > >
> > http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t>
> > <
> > http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t&by-user=t>
> > >
> > > Sent from the OpenJPA Users mailing list archive at Nabble.com.
> > >
> >
> >
> > ________________________________
> > If you reply to this email, your message will be added to the discussion
> > below:
> >
> > http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208737.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208737.html?by-user=t>
> > To unsubscribe from Oracle XMLType fetch problems, click here<
> > http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==<http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==&by-user=t>
> > >.
> >
> >
> > --
> > View this message in context:
> > http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209046.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209046.html?by-user=t>
> > Sent from the OpenJPA Users mailing list archive at Nabble.com.
> >
> 
> 
> ________________________________
> If you reply to this email, your message will be added to the discussion below:
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209080.html
> To unsubscribe from Oracle XMLType fetch problems, click here<http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==>.
> 
> 
> --
> View this message in context: http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6251372.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.

RE: Oracle XMLType fetch problems

Posted by kostellodon <do...@citi.com>.
I've run into issues with handling strings whose length > 4000 chars.  I know this is a documented bug that is fixed in OpenJPA 2.1, but I'm limited to the OpenJPA 1.2.1, and am trying to fit the solution into that version.

I extended the base OracleDictionary, modified my persistence.xml to use my dictionary, and overrode the connectedConfiguration() method.  This fixed the fetch problems.

However, I can't figure out how to get the insert to work.  I overrode the setTyped() method and put "stmnt.setClob" in there for my xml columns.  However, I'm getting an abstract method exception when this gets invoked.  Additionally, I can't figure out how to get the changes made in RowImpl to get the generated sql correctly created (i.e. to insert XMLType(?) into the string).  Do you have any insight into how or if I can work around this issue?

Thanks for any help.

Don

________________________________
From: Michael Dick [via OpenJPA] [mailto:ml-node+6209080-1310115157-321123@n2.nabble.com]
Sent: Friday, March 25, 2011 3:27 PM
To: Kostello, Donald G [GCG-NAOT]
Subject: Re: Oracle XMLType fetch problems

The columnDefinition is the way I'd recommend if you know you'll be using
Oracle. Other databases might have a different type names for XML columns so
you're losing a little portability with this approach.

At any rate, I'm glad it worked for you.

-mike


On Fri, Mar 25, 2011 at 3:14 PM, kostellodon <[hidden email]</user/SendEmail.jtp?type=node&node=6209080&i=0&by-user=t>>wrote:

> I don't have control over our production environment, so I can't ensure
> we'll have the fixpacks available, so I can't try your second solution.
>  But, your first method worked like a charm.  Adding the same
> columnDefinition to my jaxb example caused that to start working also.  The
> restriction seems to be that if I have multiple mappings for the same table,
> the first entity that I use to access the table has to have that
> columnDefinition (which is covered, obviously, by adding that definition to
> all of my entities accessing that table).  Thanks for the help.
>
> Don
>
> ________________________________
> From: Michael Dick [via OpenJPA] [mailto:
> [hidden email]</user/SendEmail.jtp?type=node&node=6209080&i=1&by-user=t>]
> Sent: Friday, March 25, 2011 1:30 PM
> To: Kostello, Donald G [GCG-NAOT]
> Subject: Re: Oracle XMLType fetch problems
>
> Hi Don,
>
> I'm not familiar with jaxb, but what you have looks pretty close to the
> example in the OpenJPA manual.
>
> I've tried to reproduce the non-jaxb path and found that the problem is
> that
> OpenJPA is expecting your XML column to be a VARCHAR (because that's how
> it's defined in the entity).
>
> I've found two ways to solve the problem :
> 1. Add a columnDefinition to your @Column annotation. For example :
>
>    @Column(name = "XMLCOLUMN", columnDefinition ="XMLCOLUMN XMLType")
>    private String xmlColumn;
>
> 2. Set the openjpa.jdbc.SchemaFactory property to "native" in
> persistence.xml. This will tell OpenJPA to read the column definitions for
> every entity in your persistence unit - so it'll take a little longer to
> create the EntityManagerFactory. You will also want the fixes for
> OPENJPA-128 <https://issues.apache.org/jira/browse/OPENJPA-1289>9 and
> OPENJPA-1874 <https://issues.apache.org/jira/browse/OPENJPA-1874>. These
> are
> available in our nightly snapshots which are picked up by WebSphere on a
> regular basis (but you might need the latest fixpack).
>
> Hope this helps,
> -mike
>
> On Fri, Mar 25, 2011 at 11:47 AM, kostellodon <[hidden
> email]</user/SendEmail.jtp?type=node&node=6208737&i=0&by-user=t>>wrote:
>
> > I am working with base WebSphere 7, which includes JPA 1.2.1, and am
> > interacting with an Oracle 11.2 database.  I have a table with an XMLType
> > column in it that I am trying to persist and later retrieve from.  I am
> > doing my testing using JUnit 4, using ojdbc6.11.1.0.7.0.jar for my
> driver.
> > My classes are being enhanced at loadtime using the javaagent.
> >
> > I have tried 2 different methods to store and retrieve the xmltype
> column.
> > My first class uses a simple String attribute, and looks like this
> > (BasicEntity just contains versioning and user info):
> >
> > @Entity
> > @Table(name="SERVICE_SNAPSHOTS")
> > public class ServiceSnapshot extends BasicEntity {
> >
> >        private static final long serialVersionUID = 5789621189247103676L;
> >
> >        @Id
> >        @Column(name="SS_ID")
> >        @SequenceGenerator(name="id_generatorServiceSnapshot",
> > sequenceName="SERVICE_SNAPSHOTS_SEQ", allocationSize=1)
> >        @GeneratedValue(strategy=GenerationType.SEQUENCE,
> > generator="id_generatorServiceSnapshot")
> >        private Long id;
> >
> >        @Column(name="SS_SERVICE_CD")
> >        private String serviceCode;
> >
> >        @Column(name="SS_OPERATION_CD")
> >        private String operationCode;
> >
> >        @Column(name="SS_CONTENTS_XML")
> >        private String contentsXML;
> >
> >
> > When I persist the objects, things appear to be stored in the database as
> > expected.  If I store and fetch the objects in the same method (so that
> the
> > objects are in the entity manager), everything comes back fine.  I can
> > query
> > the database via SQL and the results are returned.  However, if I just
> > fetch
> > the objects, all of the attributes except the XML attribute are properly
> > fetched.  The XML attribute is null.  If I log the SQL that's being run,
> I
> > see the column in the SQL string, but the contentsXML is still null.
> >
> > My second uses a JAX-B enhanced object to replace the contentsXML
> > attribute,
> > and this attribute looks like this:
> >        @Persistent(fetch=FetchType.EAGER)
> >        @Strategy("org.apache.openjpa.jdbc.meta.strats.XMLValueHandler")
> >        @Column(name="ss_contents_xml")
> >        private DEServiceResults results;
> >
> > I get the same behavior with this class - the results attribute is null,
> > even though the other attributes are not, and results is in the SQL query
> > that gets logged.
> >
> > I can fetch the xml if I use a native query, so I don't think it's a
> driver
> > issue.  Am I setting up my xmltype incorrectly, is this an OpenJPA
> problem,
> > or is this a bug with the IBM version?
> >
> > Thanks for any help.
> >
> > Don
> >
> > --
> > View this message in context:
> >
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t>
> <
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t&by-user=t>
> >
> > Sent from the OpenJPA Users mailing list archive at Nabble.com.
> >
>
>
> ________________________________
> If you reply to this email, your message will be added to the discussion
> below:
>
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208737.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208737.html?by-user=t>
> To unsubscribe from Oracle XMLType fetch problems, click here<
> http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==<http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==&by-user=t>
> >.
>
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209046.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209046.html?by-user=t>
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>


________________________________
If you reply to this email, your message will be added to the discussion below:
http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209080.html
To unsubscribe from Oracle XMLType fetch problems, click here<http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==>.


--
View this message in context: http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6251372.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: Oracle XMLType fetch problems

Posted by Michael Dick <mi...@gmail.com>.
The columnDefinition is the way I'd recommend if you know you'll be using
Oracle. Other databases might have a different type names for XML columns so
you're losing a little portability with this approach.

At any rate, I'm glad it worked for you.

-mike


On Fri, Mar 25, 2011 at 3:14 PM, kostellodon <do...@citi.com>wrote:

> I don't have control over our production environment, so I can't ensure
> we'll have the fixpacks available, so I can't try your second solution.
>  But, your first method worked like a charm.  Adding the same
> columnDefinition to my jaxb example caused that to start working also.  The
> restriction seems to be that if I have multiple mappings for the same table,
> the first entity that I use to access the table has to have that
> columnDefinition (which is covered, obviously, by adding that definition to
> all of my entities accessing that table).  Thanks for the help.
>
> Don
>
> ________________________________
> From: Michael Dick [via OpenJPA] [mailto:
> ml-node+6208737-1681935879-321123@n2.nabble.com]
> Sent: Friday, March 25, 2011 1:30 PM
> To: Kostello, Donald G [GCG-NAOT]
> Subject: Re: Oracle XMLType fetch problems
>
> Hi Don,
>
> I'm not familiar with jaxb, but what you have looks pretty close to the
> example in the OpenJPA manual.
>
> I've tried to reproduce the non-jaxb path and found that the problem is
> that
> OpenJPA is expecting your XML column to be a VARCHAR (because that's how
> it's defined in the entity).
>
> I've found two ways to solve the problem :
> 1. Add a columnDefinition to your @Column annotation. For example :
>
>    @Column(name = "XMLCOLUMN", columnDefinition ="XMLCOLUMN XMLType")
>    private String xmlColumn;
>
> 2. Set the openjpa.jdbc.SchemaFactory property to "native" in
> persistence.xml. This will tell OpenJPA to read the column definitions for
> every entity in your persistence unit - so it'll take a little longer to
> create the EntityManagerFactory. You will also want the fixes for
> OPENJPA-128 <https://issues.apache.org/jira/browse/OPENJPA-1289>9 and
> OPENJPA-1874 <https://issues.apache.org/jira/browse/OPENJPA-1874>. These
> are
> available in our nightly snapshots which are picked up by WebSphere on a
> regular basis (but you might need the latest fixpack).
>
> Hope this helps,
> -mike
>
> On Fri, Mar 25, 2011 at 11:47 AM, kostellodon <[hidden
> email]</user/SendEmail.jtp?type=node&node=6208737&i=0&by-user=t>>wrote:
>
> > I am working with base WebSphere 7, which includes JPA 1.2.1, and am
> > interacting with an Oracle 11.2 database.  I have a table with an XMLType
> > column in it that I am trying to persist and later retrieve from.  I am
> > doing my testing using JUnit 4, using ojdbc6.11.1.0.7.0.jar for my
> driver.
> > My classes are being enhanced at loadtime using the javaagent.
> >
> > I have tried 2 different methods to store and retrieve the xmltype
> column.
> > My first class uses a simple String attribute, and looks like this
> > (BasicEntity just contains versioning and user info):
> >
> > @Entity
> > @Table(name="SERVICE_SNAPSHOTS")
> > public class ServiceSnapshot extends BasicEntity {
> >
> >        private static final long serialVersionUID = 5789621189247103676L;
> >
> >        @Id
> >        @Column(name="SS_ID")
> >        @SequenceGenerator(name="id_generatorServiceSnapshot",
> > sequenceName="SERVICE_SNAPSHOTS_SEQ", allocationSize=1)
> >        @GeneratedValue(strategy=GenerationType.SEQUENCE,
> > generator="id_generatorServiceSnapshot")
> >        private Long id;
> >
> >        @Column(name="SS_SERVICE_CD")
> >        private String serviceCode;
> >
> >        @Column(name="SS_OPERATION_CD")
> >        private String operationCode;
> >
> >        @Column(name="SS_CONTENTS_XML")
> >        private String contentsXML;
> >
> >
> > When I persist the objects, things appear to be stored in the database as
> > expected.  If I store and fetch the objects in the same method (so that
> the
> > objects are in the entity manager), everything comes back fine.  I can
> > query
> > the database via SQL and the results are returned.  However, if I just
> > fetch
> > the objects, all of the attributes except the XML attribute are properly
> > fetched.  The XML attribute is null.  If I log the SQL that's being run,
> I
> > see the column in the SQL string, but the contentsXML is still null.
> >
> > My second uses a JAX-B enhanced object to replace the contentsXML
> > attribute,
> > and this attribute looks like this:
> >        @Persistent(fetch=FetchType.EAGER)
> >        @Strategy("org.apache.openjpa.jdbc.meta.strats.XMLValueHandler")
> >        @Column(name="ss_contents_xml")
> >        private DEServiceResults results;
> >
> > I get the same behavior with this class - the results attribute is null,
> > even though the other attributes are not, and results is in the SQL query
> > that gets logged.
> >
> > I can fetch the xml if I use a native query, so I don't think it's a
> driver
> > issue.  Am I setting up my xmltype incorrectly, is this an OpenJPA
> problem,
> > or is this a bug with the IBM version?
> >
> > Thanks for any help.
> >
> > Don
> >
> > --
> > View this message in context:
> >
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html
> <
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t
> >
> > Sent from the OpenJPA Users mailing list archive at Nabble.com.
> >
>
>
> ________________________________
> If you reply to this email, your message will be added to the discussion
> below:
>
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208737.html
> To unsubscribe from Oracle XMLType fetch problems, click here<
> http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==
> >.
>
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209046.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>

RE: Oracle XMLType fetch problems

Posted by kostellodon <do...@citi.com>.
I don't have control over our production environment, so I can't ensure we'll have the fixpacks available, so I can't try your second solution.  But, your first method worked like a charm.  Adding the same columnDefinition to my jaxb example caused that to start working also.  The restriction seems to be that if I have multiple mappings for the same table, the first entity that I use to access the table has to have that columnDefinition (which is covered, obviously, by adding that definition to all of my entities accessing that table).  Thanks for the help.

Don

________________________________
From: Michael Dick [via OpenJPA] [mailto:ml-node+6208737-1681935879-321123@n2.nabble.com]
Sent: Friday, March 25, 2011 1:30 PM
To: Kostello, Donald G [GCG-NAOT]
Subject: Re: Oracle XMLType fetch problems

Hi Don,

I'm not familiar with jaxb, but what you have looks pretty close to the
example in the OpenJPA manual.

I've tried to reproduce the non-jaxb path and found that the problem is that
OpenJPA is expecting your XML column to be a VARCHAR (because that's how
it's defined in the entity).

I've found two ways to solve the problem :
1. Add a columnDefinition to your @Column annotation. For example :

    @Column(name = "XMLCOLUMN", columnDefinition ="XMLCOLUMN XMLType")
    private String xmlColumn;

2. Set the openjpa.jdbc.SchemaFactory property to "native" in
persistence.xml. This will tell OpenJPA to read the column definitions for
every entity in your persistence unit - so it'll take a little longer to
create the EntityManagerFactory. You will also want the fixes for
OPENJPA-128 <https://issues.apache.org/jira/browse/OPENJPA-1289>9 and
OPENJPA-1874 <https://issues.apache.org/jira/browse/OPENJPA-1874>. These are
available in our nightly snapshots which are picked up by WebSphere on a
regular basis (but you might need the latest fixpack).

Hope this helps,
-mike

On Fri, Mar 25, 2011 at 11:47 AM, kostellodon <[hidden email]</user/SendEmail.jtp?type=node&node=6208737&i=0&by-user=t>>wrote:

> I am working with base WebSphere 7, which includes JPA 1.2.1, and am
> interacting with an Oracle 11.2 database.  I have a table with an XMLType
> column in it that I am trying to persist and later retrieve from.  I am
> doing my testing using JUnit 4, using ojdbc6.11.1.0.7.0.jar for my driver.
> My classes are being enhanced at loadtime using the javaagent.
>
> I have tried 2 different methods to store and retrieve the xmltype column.
> My first class uses a simple String attribute, and looks like this
> (BasicEntity just contains versioning and user info):
>
> @Entity
> @Table(name="SERVICE_SNAPSHOTS")
> public class ServiceSnapshot extends BasicEntity {
>
>        private static final long serialVersionUID = 5789621189247103676L;
>
>        @Id
>        @Column(name="SS_ID")
>        @SequenceGenerator(name="id_generatorServiceSnapshot",
> sequenceName="SERVICE_SNAPSHOTS_SEQ", allocationSize=1)
>        @GeneratedValue(strategy=GenerationType.SEQUENCE,
> generator="id_generatorServiceSnapshot")
>        private Long id;
>
>        @Column(name="SS_SERVICE_CD")
>        private String serviceCode;
>
>        @Column(name="SS_OPERATION_CD")
>        private String operationCode;
>
>        @Column(name="SS_CONTENTS_XML")
>        private String contentsXML;
>
>
> When I persist the objects, things appear to be stored in the database as
> expected.  If I store and fetch the objects in the same method (so that the
> objects are in the entity manager), everything comes back fine.  I can
> query
> the database via SQL and the results are returned.  However, if I just
> fetch
> the objects, all of the attributes except the XML attribute are properly
> fetched.  The XML attribute is null.  If I log the SQL that's being run, I
> see the column in the SQL string, but the contentsXML is still null.
>
> My second uses a JAX-B enhanced object to replace the contentsXML
> attribute,
> and this attribute looks like this:
>        @Persistent(fetch=FetchType.EAGER)
>        @Strategy("org.apache.openjpa.jdbc.meta.strats.XMLValueHandler")
>        @Column(name="ss_contents_xml")
>        private DEServiceResults results;
>
> I get the same behavior with this class - the results attribute is null,
> even though the other attributes are not, and results is in the SQL query
> that gets logged.
>
> I can fetch the xml if I use a native query, so I don't think it's a driver
> issue.  Am I setting up my xmltype incorrectly, is this an OpenJPA problem,
> or is this a bug with the IBM version?
>
> Thanks for any help.
>
> Don
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t>
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>


________________________________
If you reply to this email, your message will be added to the discussion below:
http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208737.html
To unsubscribe from Oracle XMLType fetch problems, click here<http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==>.


--
View this message in context: http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209046.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: Oracle XMLType fetch problems

Posted by Michael Dick <mi...@gmail.com>.
Hi Don,

I'm not familiar with jaxb, but what you have looks pretty close to the
example in the OpenJPA manual.

I've tried to reproduce the non-jaxb path and found that the problem is that
OpenJPA is expecting your XML column to be a VARCHAR (because that's how
it's defined in the entity).

I've found two ways to solve the problem :
1. Add a columnDefinition to your @Column annotation. For example :

    @Column(name = "XMLCOLUMN", columnDefinition ="XMLCOLUMN XMLType")
    private String xmlColumn;

2. Set the openjpa.jdbc.SchemaFactory property to "native" in
persistence.xml. This will tell OpenJPA to read the column definitions for
every entity in your persistence unit - so it'll take a little longer to
create the EntityManagerFactory. You will also want the fixes for
OPENJPA-128 <https://issues.apache.org/jira/browse/OPENJPA-1289>9 and
OPENJPA-1874 <https://issues.apache.org/jira/browse/OPENJPA-1874>. These are
available in our nightly snapshots which are picked up by WebSphere on a
regular basis (but you might need the latest fixpack).

Hope this helps,
-mike

On Fri, Mar 25, 2011 at 11:47 AM, kostellodon <do...@citi.com>wrote:

> I am working with base WebSphere 7, which includes JPA 1.2.1, and am
> interacting with an Oracle 11.2 database.  I have a table with an XMLType
> column in it that I am trying to persist and later retrieve from.  I am
> doing my testing using JUnit 4, using ojdbc6.11.1.0.7.0.jar for my driver.
> My classes are being enhanced at loadtime using the javaagent.
>
> I have tried 2 different methods to store and retrieve the xmltype column.
> My first class uses a simple String attribute, and looks like this
> (BasicEntity just contains versioning and user info):
>
> @Entity
> @Table(name="SERVICE_SNAPSHOTS")
> public class ServiceSnapshot extends BasicEntity {
>
>        private static final long serialVersionUID = 5789621189247103676L;
>
>        @Id
>        @Column(name="SS_ID")
>        @SequenceGenerator(name="id_generatorServiceSnapshot",
> sequenceName="SERVICE_SNAPSHOTS_SEQ", allocationSize=1)
>        @GeneratedValue(strategy=GenerationType.SEQUENCE,
> generator="id_generatorServiceSnapshot")
>        private Long id;
>
>        @Column(name="SS_SERVICE_CD")
>        private String serviceCode;
>
>        @Column(name="SS_OPERATION_CD")
>        private String operationCode;
>
>        @Column(name="SS_CONTENTS_XML")
>        private String contentsXML;
>
>
> When I persist the objects, things appear to be stored in the database as
> expected.  If I store and fetch the objects in the same method (so that the
> objects are in the entity manager), everything comes back fine.  I can
> query
> the database via SQL and the results are returned.  However, if I just
> fetch
> the objects, all of the attributes except the XML attribute are properly
> fetched.  The XML attribute is null.  If I log the SQL that's being run, I
> see the column in the SQL string, but the contentsXML is still null.
>
> My second uses a JAX-B enhanced object to replace the contentsXML
> attribute,
> and this attribute looks like this:
>        @Persistent(fetch=FetchType.EAGER)
>        @Strategy("org.apache.openjpa.jdbc.meta.strats.XMLValueHandler")
>        @Column(name="ss_contents_xml")
>        private DEServiceResults results;
>
> I get the same behavior with this class - the results attribute is null,
> even though the other attributes are not, and results is in the SQL query
> that gets logged.
>
> I can fetch the xml if I use a native query, so I don't think it's a driver
> issue.  Am I setting up my xmltype incorrectly, is this an OpenJPA problem,
> or is this a bug with the IBM version?
>
> Thanks for any help.
>
> Don
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>