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 <donald.g.koste...@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.
>

Reply via email to