I followed your suggestion and placed the 'nullable' attribute on the column, but it had no impact.

I'm having problems grasping the logic behind that nullable attribute.

If the column is not nullable and I also configure JPA with nullable=false, then surely OpenJPA should throw an exception before it tries to execute a prepared statement with that field set to null?

Failing that, OpenJPA should try to persist the entity with that column = null, but the database should throw a constraint violation exception.

However in my case here, I don't see either behaviour - what I am seeing is the value of the data changed from null to an empty string.

Surely a bug?



Michael Dick on 03/04/09 21:52, wrote:
Have you tried the following ?

<basic name="numericDisplay">
     <column name="NUMERIC_DISPLAY" nullable="false"/>
     <enumerated>STRING</enumerated>
</basic>

By default OpenJPA doesn't check for constraints on your columns. So if your
mappings (or annotations) aren't consistent with the constraints in the
database you can run into problems.

Alternatively you can configure OpenJPA to read the data from the database
by adding this property :
<property name="openjpa.jdbc.SchemaFactory" value="native"/>

If you've tried either of those and we're still persisting a null value then
it's definitely a bug.

-mike

On Fri, Apr 3, 2009 at 1:51 PM, Craig L Russell <[email protected]>wrote:

Hi Adam,

Sounds like a bug. Can you please file a JIRA?

Thanks,

Craig


On Apr 3, 2009, at 9:26 AM, Adam Hardy wrote:

 Just tested this with static enhancement against mysql and have the same
problem. OpenJPA is inserting a blank string into the not-null field when
the the enum variable is null.

Is this a bug or to be expected?

Regards
Adam

Adam Hardy on 01/04/09 17:38, wrote:

I have an entity bean with this property in v1.2.0 and H2 db:
<basic name="numericDisplay">
 <column name="NUMERIC_DISPLAY"/>
 <enumerated>STRING</enumerated>
</basic>
I just discovered that I can set the property on the bean to null and
save it to a field in the DB with a not-null constraint. It saves a
zero-length string.
On reading back the row however OpenJPA throws this:
<openjpa-1.2.0-r422266:683325 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: No enum const class
org.permacode.patternrepo.PatternRepoNumericDisplay.
Surely this is inconsistent? Shouldn't I get an error when trying to do
the write first of all?
Admittedly I have yet to test it with pre-enhanced beans but I figured it
would be the same (or is that a completely different code base?)


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!




Reply via email to