Hello everybody,

after spending half of my weekend, I got it to work. I do not know  exactly WHY 
it works that way, but I think this is marginal ;)

If someone can explain it to me, feel free to do so, I would be glad.

It seems that the cause was a combination of bad Spring configuration and some 
anomalies in my project. So lets have a look on how I solved the problem:

First, I wanted to try to persist one of the subclasses, because I wanted to 
see what discriminator value would be written to the database. 
Because I only need to read that subclass from other objects and do not need to 
call them directly from database, I created a new Spring DAO for this persist 
task. I found out, that persisting did not work either and thus realised that I 
did not include a transaction manager (it was configured, but not linked - too 
bad :\ ).

After reconfiguring the Spring framework I was able to persist the entity 
without any problems. After that, I ran my application again and - it suddenly 
recognised the entity persisted before (but still not the other subclasses).

After some try-and-error, I found out:

To make Spring / OpenJPA recognise the discriminator values, the subclasses 
have to be

a) directly related to any entity, that can be called with a Spring DAO
or
b) directly called with a Spring DAO

If only the superclass is related / called, the discriminator value of the 
subclasses will not be recognised.

Maybe some OpenJPA / Spring experts will laugh at me, but please explain me, 
why it works that way ^^"

-------- Original-Nachricht --------
> Datum: Fri, 15 May 2009 16:47:31 +0200
> Von: "Jasmin Riemer" <[email protected]>
> An: [email protected]
> Betreff: Re: Inheritance: Subclasses are not recognised

> Hi Mike,
> 
> yes, I have.
> This was also my first thought about that problem ;)
> Maybe other configurations in persistence.xml that may cause problems?
> 
> <properties>          
>                       <property name="openjpa.ConnectionUserName" 
> value="root"/>
>                       <property name="openjpa.ConnectionPassword" value=""/>
>                       <property name="openjpa.ConnectionURL"
> value="jdbc:mysql://localhost:3306/ghostbase"/>
>                       <property name="openjpa.ConnectionDriverName"
> value="com.mysql.jdbc.Driver"/>
>                       <property name="openjpa.jdbc.DBDictionary"
> value="mysql(TableType=myisam)"/>
>                       <property name="openjpa.MaxFetchDepth" value="2"/>
>               </properties>
> 
> -Jasmin
> 
> -------- Original-Nachricht --------
> > Datum: Fri, 15 May 2009 09:25:54 -0500
> > Von: Michael Dick <[email protected]>
> > An: [email protected]
> > Betreff: Re: Inheritance: Subclasses are not recognised
> 
> > Hi Jasmin,
> > 
> > Do you have all your entities listed in persistence.xml?
> > 
> > -mike
> > 
> > On Fri, May 15, 2009 at 7:08 AM, Jasmin Riemer <[email protected]>
> > wrote:
> > 
> > > Hello everybody,
> > >
> > > currently, I am working with OpenJPA in the Spring framework and try
> to
> > > implement the following:
> > >
> > > I inherit certain subclasses from a mainclass. All these classes
> should
> > be
> > > mapped to a single table, so I use InheritanceType.SINGLE_TABLE and
> add
> > a
> > > discriminator value to each subclass.
> > >
> > > Simplified, it looks like this:
> > >
> > > @Entity
> > > @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
> > > @DiscriminatorColumn(name="doc_type",
> > > discriminatorType=DiscriminatorType.STRING)
> > > public abstract class Document {
> > >
> > > // ...
> > >
> > > }
> > >
> > > @Entity
> > > @DiscriminatorValue(value="Magazine")
> > > public class Magazine extends Document {
> > >
> > > // ...
> > >
> > > }
> > >
> > > @Entity
> > > @DiscriminatorValue(value="Book")
> > > public class Book extends Document {
> > >
> > > // ...
> > >
> > > }
> > >
> > > Unfortunately, I get the following error message when I try to load
> data
> > > from the database:
> > >
> > > Exception in thread "main"
> > > org.springframework.dao.InvalidDataAccessApiUsageE xception: Could not
> > map
> > > discriminator value "Book" to any known subclasses of the requested
> > class
> > > "project.entities.Document" (known discriminator values: [Document,
> > > Magazine]).; nested exception is <openjpa-1.2.1-r752877:753278
> nonfatal
> > user
> > > error> org.apache.openjpa.persistence.ArgumentException: Could not map
> > > discriminator value "Book" to any known subclasses of the requested
> > class
> > > "project.entities.Document" (known discriminator values: [Document,
> > > Magazine]).
> > >
> > > It seems that there are only known the main class and the subclass
> > > "Magazine", but there is a problem with "Book" (and some other classes
> > > inherited from "Document").
> > >
> > > I do not have much experience with OpenJPA and Spring and thus I have
> no
> > > clue how to solve this problem. Anybody out there who has an idea or
> > maybe
> > > had a similar problem?
> > > Is there maybe something special I could have used accidentally for
> > > "Magazine", but not for the other classes?
> > > --
> > > Neu: GMX FreeDSL Komplettanschluss mit DSL 6.000 Flatrate +
> > > Telefonanschluss für nur 17,95 Euro/mtl.!*
> > > http://dslspecial.gmx.de/freedsl-surfflat/?ac=OM.AD.PD003K11308T4569a
> > >
> 
> -- 
> Neu: GMX FreeDSL Komplettanschluss mit DSL 6.000 Flatrate +
> Telefonanschluss für nur 17,95 Euro/mtl.!*
> http://dslspecial.gmx.de/freedsl-surfflat/?ac=OM.AD.PD003K11308T4569a

-- 
Neu: GMX FreeDSL Komplettanschluss mit DSL 6.000 Flatrate + Telefonanschluss 
für nur 17,95 Euro/mtl.!* 
http://dslspecial.gmx.de/freedsl-surfflat/?ac=OM.AD.PD003K11308T4569a

Reply via email to