[ 
https://issues.apache.org/jira/browse/OPENJPA-2627?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Heath Thomann closed OPENJPA-2627.
----------------------------------
       Resolution: Fixed
    Fix Version/s: 2.4.1
                   2.2.3

> Create an option to disable column type checking errors during schema 
> validation.
> ---------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2627
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2627
>             Project: OpenJPA
>          Issue Type: Improvement
>          Components: usability
>    Affects Versions: 2.2.3, 2.4.1
>            Reporter: Heath Thomann
>            Assignee: Heath Thomann
>            Priority: Trivial
>             Fix For: 2.2.3, 2.4.1
>
>
> I have a customer scenario (as I'll describe in a moment) that requires them 
> to set the following property:
> <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
> When I have the customer set this property, OpenJPA throws this exception:
>  org.apache.openjpa.persistence.ArgumentException:
> "com.xxx.yyy.Parent.phone" declares a column that is not
> compatible with the expected type "varchar".  Column details:
> Full Name: Parent.phone
> Type: varbinary
> In other words, the customer's column for 'phone' is defined as varbinary in 
> their SQL Server database.  This type seems to be specific to SQL Server.  
> The JPA entity defines 'phone' as a String.  Therefore, from OpenJPA's point 
> of view, this is a mismatch.  The customer only sees this when the above 
> property is set, without this property OpenJPA doesn't do the schema 
> validation as such this goes unchecked and all works fine.  While OpenJPA 
> views this as a mismatch and doesn't allow them to go on, the JDBC driver and 
> database allows the String to be stored into an SQL Server varbinary.
> The scenario under which they are required to set the SchemaFactory is the 
> typical SQL miss ordering that can occur when OpenJPA doesn't know about a FK 
> constraint.  That is, they have an FK constraint in the database between, as 
> an example, a Child to Parent.  OpenJPA doesn't know about this FK 
> constraint.  Given this, when the customer persists a new Parent and Child, 
> sometimes OpenJPA inserts the Child first, which yield an FK Constraint 
> Violation exception.  This is nothing new and OpenJPA, and the SchemaFactory 
> property was created to handle this scenario.  It allows OpenJPA to view the 
> database table schema, and in so doing OpenJPA can detect (learn about) the 
> FK constraint which will allow it to properly order SQL statements.
> As you can see, we are in a bind here: the customer can not change their 
> column type, and OpenJPA will not go on given this column mismatch.  I have 
> seen other cases where the use of SchemaFactory causes exceptions from column 
> type checking that otherwise go unchecked and work fine when the property is 
> not set.  Given this, we need to allow a customer a way (property) to disable 
> the column type checking.  Note that I realize another option for this 
> particular scenario is to use @ForeignKey.  However, this requires a customer 
> to change their code and is OpenJPA specific.  Therefore the customer is not 
> willing to use this.
> Thanks,
> Heath



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to