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 <[email protected]>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.
>